Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 沿dim1跟踪最大值,并在dim3中改变索引_Python_Numpy_Vectorization - Fatal编程技术网

Python 沿dim1跟踪最大值,并在dim3中改变索引

Python 沿dim1跟踪最大值,并在dim3中改变索引,python,numpy,vectorization,Python,Numpy,Vectorization,我有一个三维数据的“立方体”,其中列中有一些峰值,或者说第一维。峰值指数可能会根据检查的行而移动。第三维度可能会做一些更复杂的事情,但现在可以被认为只是通过一些线性函数来缩放事物 我想沿着第一个维度找到最大值的索引,但有一个约束条件,即对于每一行,选择z索引时,列峰值将最接近于0.5 下面是一个示例图像,它是一个具有固定z的行、列平面: 这些数组有时会很大,比如说21x11x200浮点64s,所以我想对这个计算进行矢量化。使用for循环编写,如下所示: cols, rows, zs = dat

我有一个三维数据的“立方体”,其中列中有一些峰值,或者说第一维。峰值指数可能会根据检查的行而移动。第三维度可能会做一些更复杂的事情,但现在可以被认为只是通过一些线性函数来缩放事物

我想沿着第一个维度找到最大值的索引,但有一个约束条件,即对于每一行,选择z索引时,列峰值将最接近于0.5

下面是一个示例图像,它是一个具有固定z的行、列平面:

这些数组有时会很大,比如说21x11x200浮点64s,所以我想对这个计算进行矢量化。使用for循环编写,如下所示:

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
。编辑。我已经添加了这个-,让我进一步研究一下。看起来他们给出了相同的答案,我只是有一个变量名的问题。谢谢