亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號