为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Python 中向量化增量

如何在 Python 中向量化增量

开满天机 2022-04-24 18:46:57
我有一个二维数组,我有一些数字要添加到一些单元格中。我想对操作进行矢量化以节省时间。问题是当我需要向同一个单元格添加多个数字时。在这种情况下,矢量化代码仅添加最后一个。'a' 是我的数组,'x' 和 'y' 是我想要增加的单元格的坐标,而 'z' 包含我想要添加的数字。import numpy as npa=np.zeros((4,4))x=[1,2,1]y=[0,1,0]z=[2,3,1]a[x,y]+=zprint(a)如您所见,a[1,0] 应该增加两次:1 加 2,1 加 1。所以预期的数组应该是:[[0. 0. 0. 0.] [3. 0. 0. 0.] [0. 3. 0. 0.] [0. 0. 0. 0.]]但相反,我得到:[[0. 0. 0. 0.] [1. 0. 0. 0.] [0. 3. 0. 0.] [0. 0. 0. 0.]]这个问题很容易用 for 循环解决,但我想知道我是否可以正确地向量化这个操作。
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

用于np.add.at:


import numpy as np


a = np.zeros((4,4))

x = [1, 2, 1]

y = [0, 1, 0]

z = [2, 3, 1]

np.add.at(a, (x, y), z)

print(a)

# [[0. 0. 0. 0.]

#  [3. 0. 0. 0.]

#  [0. 3. 0. 0.]

#  [0. 0. 0. 0.]]


查看完整回答
反对 回复 2022-04-24
?
四季花海

TA贡献1811条经验 获得超5个赞

您可以创建一个大小为 3x4x4 的多维数组,然后将z所有 3 个不同的维度相加,然后将它们全部相加


import numpy as np

x = [1,2,1]

y = [0,1,0]

z = [2,3,1]

a = np.zeros((3,4,4))

n = range(a.shape[0])

a[n,x,y] += z

print(sum(a))

这将导致


[[0. 0. 0. 0.]

 [3. 0. 0. 0.]

 [0. 3. 0. 0.]

 [0. 0. 0. 0.]]


查看完整回答
反对 回复 2022-04-24
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

当你在做的时候a[x,y]+=z,我们可以将操作分解为:


a[1, 0], a[2, 1], a[1, 0] = [a[1, 0] + 2, a[2, 1] + 3, a[1, 0] + 1]

# Equivalent to :

a[1, 0] = 2

a[2, 1] = 3

a[1, 0] = 1

这就是为什么它不起作用。但是,如果您使用每个维度的循环来增加数组,它应该可以工作


查看完整回答
反对 回复 2022-04-24
  • 3 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信