相关疑难解决方法(0)

使用scipy.interpolate.interpn插入一个N维数组

假设我的数据取决于4个变量:a,b,c和d.我想插值返回一个对应于a和b的单个值的二维数组,以及一个c和d的值数组.但是,阵列大小不必相同.具体而言,我的数据来自晶体管模拟.电流取决于4个变量.我想绘制一个参数变化.参数上的点数远小于水平轴的点数.

import numpy as np
from scipy.interpolate import interpn
arr = np.random.random((4,4,4,4))
x1 = np.array([0, 1, 2, 3])
x2 = np.array([0, 10, 20, 30])
x3 = np.array([0, 10, 20, 30])
x4 = np.array([0, .1, .2, .30])
points = (x1, x2, x3, x4)
Run Code Online (Sandbox Code Playgroud)

以下作品:

xi = (0.1, 9, np.transpose(np.linspace(0, 30, 4)), np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)
Run Code Online (Sandbox Code Playgroud)

这样做:

xi = (0.1, 9, 24, np.linspace(0, 0.3, 4))
result = interpn(points, arr, xi)
Run Code Online (Sandbox Code Playgroud)

但不是这个:

xi = (0.1, 9, np.transpose(np.linspace(0, 30, 3)), …
Run Code Online (Sandbox Code Playgroud)

python numpy scipy python-2.7

4
推荐指数
1
解决办法
6914
查看次数

在 3d 空间中的两个平面之间进行插值

我正在开发一种工具,可以让您在 3D“体积”上圈出/包围事物。我想通过标记“切片”1 和 3 并从该信息“填充”切片 2 来节省时间。

两个简单的解决方案是:

1. slice2 = slice1 AND slice3 (gets the overlap between the two)
2. slice2 = slice2 OR  slice3 (true for any pixel true in either image)
Run Code Online (Sandbox Code Playgroud)

这些都很好而且很快,但我更喜欢通过使形状在两者之间进行某种平均/插值来做一些更智能的事情。您可以将其想象为试图找到连接海平面飞机和空中高原的悬崖面。

示例:填充此 3d 矩阵中的切片 2-4。(使用创建montage从一到五片

随意想出全新的想法。我将把我的想法放在下面。

我想到的一些东西可能会对你(回答者)有所帮助,但我未能成功使用。

  • 您可以对每个图像执行 bwperim。
  • 您可以尝试对图像进行“平均”(或加权平均)。

到目前为止我得到的最好的:

添加图像。给你重叠和两个周长:
- 一个内周长(其内部肯定是 1)
- 和一个外周长(其内部是有问题的)。
您还可以屏蔽 >0 AND <2 的区域,这是该可疑区域的屏蔽。在两周边图像上
运行 a并遮罩:bwdist

![蒙版 bwdist 图像] 2

但不知道如何从这里出发。沿着该区域绘制“最大”轮廓的线是可行的,但我不确定如何稳健地做到这一点。

欢迎任何关于修正我的想法或任何其他想法的想法!

谢谢。

math 3d matlab contour spatial-interpolation

2
推荐指数
1
解决办法
4044
查看次数

Numpy:从给定范围生成组合的有效方法

我有一个n维数组,如下所示:

np.array([[0,3],[0,3],[0,10]])
Run Code Online (Sandbox Code Playgroud)

在此数组中,元素表示低值和高值.例如:[0,3][0,1,2,3]

我需要使用上面给出的范围生成所有值的组合.例如,我想要[0,0,0], [0,0,1] ... [0,1,0] ... [3,3,10]

我尝试过以下方法来获得我想要的东西:

ds = np.array([[0,3],[0,3],[0,10]])
nItems = int(reduce(lambda a,b: a * (b[1] - b[0] + 1), ds, 1))
myCombinations = np.zeros((nItems,))
nArrays = []
for x in range(ds.shape[0]):
    low = ds[x][0]
    high= ds[x][1]
    nitm = high - low + 1
    ar = [x+low for x in range(nitm) ]
    nArrays.append(ar)

myCombinations = cartesian(nArrays)
Run Code Online (Sandbox Code Playgroud)

笛卡尔函数取自于使用numpy来构建两个数组的所有组合的数组

我需要做几百万次.

我的问题:有没有更好/更有效的方法来做到这一点?

python arrays combinations numpy

1
推荐指数
1
解决办法
3176
查看次数

使用MATLAB在3D MRI体积中创建中间切片

我有9张MRI图像,想用这些图像制作3D体积.从那里,我想插入每个切片之间.给定卷中的两个切片,我想在两个切片之间插入一个中间帧.目标是创建一个执行此插值的18 MRI体积.

我将如何在MATLAB中实现这一目标?

matlab interpolation image-processing multidimensional-array

0
推荐指数
1
解决办法
2172
查看次数