微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将数字添加到numpy数组的元素而不是所有元素?

如何解决如何将数字添加到numpy数组的元素而不是所有元素?

这就是我想要做的: 我有一个二维的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 举报,一经查实,本站将立刻删除。