4 回答

TA貢獻1858條經驗 獲得超8個贊
一種方法是將零重新分配給 np.inf,然后每行取最小值:
np.where(x>0, x, np.inf).min(axis=1)
輸出:
array([1., 4., 2.])

TA貢獻1898條經驗 獲得超8個贊
屏蔽陣列正是為這些目的而設計的。您可以利用數組中的掩碼零(或您想要的任何其他類型的掩碼),并在您的掩碼數組上執行您在常規數組上所做的大部分工作:
import numpy.ma as ma
mx = ma.masked_array(x, mask=x==0)
mx.min(1)
輸出:
[1.0 4.0 2.0]

TA貢獻2019條經驗 獲得超9個贊
# example data
x = np.array([[3., 2., 0., 1., 6.], [8., 4., 5., 0., 6.], [0., 7., 2., 5., 0.]])
# set all the values inside the maxtrix which are equal to 0, to *inf*
# np.inf represents a very large number
# inf, stands for infinity
x[x==0] = np.inf
# grep the lowest value, in each array (now that there is no 0 value anymore)
np.min(x, axis=1)

TA貢獻1843條經驗 獲得超7個贊
我用這種方式解決了,時間復雜度是o(n^2).
import numpy as np
x = np.array([[3., 2., 0., 1., 6.], [8., 4., 5., 0., 6.], [0., 7., 2., 5., 0.]])
for i in range(len(x)) :
small=x[i][i]
for j in x[i] :
if (j!=0 and j<small):
small=j
print(small)
添加回答
舉報