0
我想從矩陣中找到非零值超過n次的行並清理它,但我只能用for
循環的方式來找到。是否可以找到沒有for循環的矩陣的每一行的np.count_nonzero?
例如,清理具有超過5次值的矩陣行aaa
。
aaa = np.zeros([5,8])
aaa[0] = [0,0,0,15,21,10,0,0] <<
aaa[1] = [0,3,7,5,4,0,0,0]
aaa[2] = np.random.randint(3, size=8)
aaa[3] = np.random.randint(15, size=8)
print aaa
>> [[ 0. 0. 0. 15. 21. 10. 0. 0.]
[ 0. 3. 7. 5. 4. 0. 0. 0.]
[ 1. 1. 2. 0. 2. 1. 1. 1.]
[ 10. 9. 12. 2. 11. 12. 12. 12.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]]
for row in range(5):
print np.count_nonzero(aaa[row])
if np.count_nonzero(aaa[row]) > 5:
aaa[row] = 0
print aaa
>>>[[ 0. 0. 0. 15. 21. 10. 0. 0.]
[ 0. 3. 7. 5. 4. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.] # clean
[ 0. 0. 0. 0. 0. 0. 0. 0.] # clean
[ 0. 0. 0. 0. 0. 0. 0. 0.]]
事實上,我想要做的就是清洗每一行中的平穩噪聲並保持高斯樣峯值行。我的實際數據矩陣非常大(維數= 10^5 x 10^6)。在這種情況下是否有超快速清潔行的方法?