如何解决如何将数字添加到numpy数组的元素而不是所有元素?
A = [[ 0,400,400],[ 0,800],800,1010],[ 400,[ 800,910,1010]]
我想为第一列的所有非零元素添加+20。因此,答案应如下所示:
A =[[ 0,420,820,1010]]
可以使用循环,但是没有矢量化方法,或者numpy库中是否有某些东西可以实现此目的?
我所能想到的是:
A[:,1] = A[:,1][A[:,1] != 0] + 20
但是它并不能按照我想要的方式工作,因为它只返回带有修改后的非零值的减量数组,因此会产生错误。
解决方法
一个简短的版本是
A[A[:,1]!=0,1] += 20
这意味着在第一列的所有行中加20,其中第一列不为零。
更一般
A[A[:,i]!=k,j] += l
将l添加到第j列中的所有行,其中第i列中的行不是k。
,您可以使用np.where
:
A[:,1] = np.where(A[:,A[:,1]+20,0)
print(A)
打印:
[[ 0 0 400 400]
[ 0 420 400 800]
[ 0 820 400 1010]
[ 400 0 800 400]
[ 400 420 800 800]
[ 400 820 800 1010]
[ 800 0 910 400]
[ 800 420 910 800]
[ 800 820 910 1010]]
,
使用numpy函数apply_along_axis
def addTwenty(x):
if(x[1] > 0):
x[1] += 20
return x
A = np.apply_along_axis(addTwenty,1,A)
打印:
array([[ 0,400,400],[ 0,420,800],820,1010],[ 400,800,[ 800,910,1010]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。