Python 函数从数组的行中查找大于零的最小数,并将其存储到列表中

Python 函数从数组的行中查找大于零的最小数,并将其存储到列表中,python,numpy,Python,Numpy,我想从9x9数组A的行中找出最小数,并存储在列表m中。但我想排除零。我做的程序返回的最小值是零 m = [] def find (L): for i in range(len(L)): m.append(A[L[i]].min()) c = [2,3,4,5,6]; find(c) print m 这里有一个简单的解决方案- np.where(a>0,a,a.max()).min(1) 样本运行- In [45]: a Out[45]: array

我想从9x9数组
A
的行中找出最小数,并存储在列表
m
中。但我想排除零。我做的程序返回的最小值是零

m = []
def find (L):
    for i in range(len(L)):
            m.append(A[L[i]].min()) 

c = [2,3,4,5,6];
find(c)
print m

这里有一个简单的解决方案-

np.where(a>0,a,a.max()).min(1)
样本运行-

In [45]: a
Out[45]: 
array([[0, 4, 6, 6, 1],
       [3, 1, 5, 0, 0],
       [6, 3, 6, 0, 0],
       [0, 6, 3, 5, 2]])

In [46]: np.where(a>0,a,a.max()).min(1)
Out[46]: array([1, 1, 3, 2])
In [62]: a
Out[62]: 
array([[0, 4, 6, 6, 1],
       [3, 1, 5, 0, 0],
       [6, 3, 6, 0, 0],
       [0, 6, 3, 5, 2]])

In [63]: L = [2,3]

In [64]: find(a,L)
Out[64]: array([3, 2])
如果要仅对
L中的行索引指定的选定行执行此操作
-

def find(a,L): 
    return np.where(a[L]>0,a[L],a.max()).min(1)
样本运行-

In [45]: a
Out[45]: 
array([[0, 4, 6, 6, 1],
       [3, 1, 5, 0, 0],
       [6, 3, 6, 0, 0],
       [0, 6, 3, 5, 2]])

In [46]: np.where(a>0,a,a.max()).min(1)
Out[46]: array([1, 1, 3, 2])
In [62]: a
Out[62]: 
array([[0, 4, 6, 6, 1],
       [3, 1, 5, 0, 0],
       [6, 3, 6, 0, 0],
       [0, 6, 3, 5, 2]])

In [63]: L = [2,3]

In [64]: find(a,L)
Out[64]: array([3, 2])

QA只希望在某些行中使用最小值,由
L
yes指定。我只希望在L中指定的行中使用最小值。。在这种情况下如何使用此代码?@vidyanair,如示例运行中所示:
np.where(a[L]>0,a[L],a.max()).min(1)
?我得到这样的输出
数组([13,14,3,72,4]),数组([13,14,3,72,4]),数组([13,14,3,72,4]),数组([13,14,3,72,4]),
…以前是这样的
[0,0,0,0,0,0]
@vidyanair您应该使用:
def find(a,L):返回np.where(a[L]>0,a[L],a.max()).min(1)
,因此跳过循环部分。我猜您看到的输出是错误的,因为您在循环中使用了建议的代码
np.where