【发布时间】:2017-10-06 07:23:07
【问题描述】:
我想从矩阵中找到非零值超过 n 次的行并清理它,但我只能想出for 循环方式。
例如,清理矩阵aaa的行,其值超过5次。
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)。在这种情况下有什么超快速的方法可以清理行吗?
【问题讨论】:
标签: python python-2.7 numpy for-loop matrix