Python 沿dim1跟踪最大值,并在dim3中改变索引
我有一个三维数据的“立方体”,其中列中有一些峰值,或者说第一维。峰值指数可能会根据检查的行而移动。第三维度可能会做一些更复杂的事情,但现在可以被认为只是通过一些线性函数来缩放事物 我想沿着第一个维度找到最大值的索引,但有一个约束条件,即对于每一行,选择z索引时,列峰值将最接近于0.5 下面是一个示例图像,它是一个具有固定z的行、列平面: 这些数组有时会很大,比如说21x11x200浮点64s,所以我想对这个计算进行矢量化。使用for循环编写,如下所示:Python 沿dim1跟踪最大值,并在dim3中改变索引,python,numpy,vectorization,Python,Numpy,Vectorization,我有一个三维数据的“立方体”,其中列中有一些峰值,或者说第一维。峰值指数可能会根据检查的行而移动。第三维度可能会做一些更复杂的事情,但现在可以被认为只是通过一些线性函数来缩放事物 我想沿着第一个维度找到最大值的索引,但有一个约束条件,即对于每一行,选择z索引时,列峰值将最接近于0.5 下面是一个示例图像,它是一个具有固定z的行、列平面: 这些数组有时会很大,比如说21x11x200浮点64s,所以我想对这个计算进行矢量化。使用for循环编写,如下所示: cols, rows, zs = dat
cols, rows, zs = data.shape
for i in range(rows):
# for each field point, make an intermediate array that is 2D with focus,frequency dimensions
arr = data[:,i,:]
# compute the thru-focus max and find the peak closest to 0.5
maxs = np.max(arr, axis=0)
max_manip = np.abs(maxs-0.5)
freq_idx = np.argmin(max_manip)
# take the thru-focus slice that peaks closest to 0.5
arr2 = data[:,i,freq_idx]
focus_idx = np.argmax(arr2)
print(focus_idx)
我的问题是,我不知道如何将这些计算汇总成向量运算。我将感谢任何帮助,谢谢 我们只需要将
轴
参数与相关的UFUNC一起使用,这将引导我们找到一个矢量化的解决方案,如下所示-
# Get freq indices along all rows in one go
idx = np.abs(data.max(0)-0.5).argmin(1)
# Index into data with those and get the argmax indices
out = data[:,np.arange(data.shape[1]), idx].argmax(0)
这给了我一个不同的答案来回答
for
循环版本——循环给出:[10 10 9 9 9 9 8 8 7]
和向量化给出[9 9 9 9 9 8 8 7]
——知道为什么吗?@BrandonDube没有在那里使用abs
。编辑。我已经添加了这个-,让我进一步研究一下。看起来他们给出了相同的答案,我只是有一个变量名的问题。谢谢