迭代numpy数组以在子数组中找到离开行索引的最大值

问题描述 投票:1回答:1

我想找到沿轴的最大二维数组= 0并且我不想在行索引处包含该值。我对这个解决方案不满意,因为我需要在一百万行上运行它,我不想在这里使用for循环。我尝试了numpy.argmax,但它计算了行的最大值,包括行索引处的值。

我的2D数组

Arry=([[1,   0.5, 0.3,   0,    0.2],
       [0,   1,   0.2,   0.8,  0],
       [0,   1,   1,     0.3,  0],
       [0,   0,   0,     1,    0]])

预期产出

[1, 3, 1]

第一行[1,0.5,0.3,0,0.2]在索引1处具有最大值,即0.5,因为值1在行索引0处,类似地在第二行中,最大值是0.8,即索引3,第四行不是因为所有都是零,所以有任何最大值

我的守则

import numpy as np

for idx,subarry in enumerate(Arry):
    newlist=np.delete(subarry, idx)
    idx_min=min(np.where(subarry==np.max(newlist))[0])
    if idx_min != 0: min_elem_idx.append(idx_min)

print(min_elem_idx)
[1, 3, 1]

我正在寻找一种Pythonic方法来实现这一点,而无需使用for循环

python arrays numpy max
1个回答
2
投票

这应该做的伎俩:

a = np.array([[1,   0.5, 0.3,   0,    0.2],
              [0,   1,   0.2,   0.8,  0],
              [0,   1,   1,     0.3,  0],
              [0,   0,   0,     1,    0]])

# Create an array of ones the same size as a
b = np.ones_like(a)

# Fill the diagonal of b with NaN
np.fill_diagonal(b, np.nan)

# Multiply the arrays in order to remove the index column from the max
c = a*b

# Find the index of the max value of every row (excluding the index value)
np.nanargmax(c, axis=1)

输出:

array([1, 3, 1, 0])

为了过滤掉每个值为零的情况(因此在定义它时“没有最大值”),您将不得不做一些额外的工作。

© www.soinside.com 2019 - 2024. All rights reserved.