假设我的数据取决于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) 我正在开发一种工具,可以让您在 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)

随意想出全新的想法。我将把我的想法放在下面。
我想到的一些东西可能会对你(回答者)有所帮助,但我未能成功使用。
到目前为止我得到的最好的:
添加图像。给你重叠和两个周长:
- 一个内周长(其内部肯定是 1)
- 和一个外周长(其内部是有问题的)。
您还可以屏蔽 >0 AND <2 的区域,这是该可疑区域的屏蔽。在两周边图像上
运行 a并遮罩:bwdist
![蒙版 bwdist 图像] 2
但不知道如何从这里出发。沿着该区域绘制“最大”轮廓的线是可行的,但我不确定如何稳健地做到这一点。
欢迎任何关于修正我的想法或任何其他想法的想法!
谢谢。
我有一个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来构建两个数组的所有组合的数组
我需要做几百万次.
我的问题:有没有更好/更有效的方法来做到这一点?
我有9张MRI图像,想用这些图像制作3D体积.从那里,我想插入每个切片之间.给定卷中的两个切片,我想在两个切片之间插入一个中间帧.目标是创建一个执行此插值的18 MRI体积.
我将如何在MATLAB中实现这一目标?
matlab interpolation image-processing multidimensional-array
matlab ×2
numpy ×2
python ×2
3d ×1
arrays ×1
combinations ×1
contour ×1
math ×1
python-2.7 ×1
scipy ×1