我想將 的每個元素乘以B整個陣列A以獲得P. 附加了當前和所需的輸出。所需的輸出基本上是一個由 2 個陣列組成的陣列,因為B.
import numpy as np
A=np.array([[1, 2, 3],
[4, 5, 6],
[7 , 8, 9]])
t = np.linspace(0,1,2)
B = 0.02109*np.exp(-t)
P=B*A
print(P)
當前輸出為
ValueError: operands could not be broadcast together with shapes (2,) (3,3)
所需的輸出是
array(([[0.02109, 0.04218, 0.06327],
[0.08436, 0.10545, 0.12654],
[0.14763, 0.16872, 0.18981]]),
([[0.00775858, 0.01551716, 0.02327574],
[0.03103432, 0.0387929 , 0.04655148],
[0.05431006, 0.06206864, 0.06982722]]))
uj5u.com熱心網友回復:
您可以通過以下方式做到這一點:
B.reshape(-1, 1, 1) * A
或者
B[:, None, None] * A
在哪里-1或:參考B.shape[0]哪個是2和1, 1/或None, None添加兩個額外的維度以B獲得所需的結果形狀,即 (2, 3, 3)。
uj5u.com熱心網友回復:
我能想到的最簡單的方法是使用串列理解,然后再轉換回 numpy.ndarray
np.asarray([A*i for i in B])
回答 :
array([[[0.02109 , 0.04218 , 0.06327 ],
[0.08436 , 0.10545 , 0.12654 ],
[0.14763 , 0.16872 , 0.18981 ]],
[[0.00775858, 0.01551715, 0.02327573],
[0.03103431, 0.03879289, 0.04655146],
[0.05431004, 0.06206862, 0.0698272 ]]])
uj5u.com熱心網友回復:
有很多可能的方法:
以下是給定陣列的運行時概述(請記住,對于更大的陣列,這些會改變):
- 重塑:0.000174 秒
- 張量點:0.000550 秒
- einsum:0.000196 秒
- 手動回圈:0.000326 秒
請參閱其中每個的實作:
numpy 重塑
在此處查找檔案: 鏈接
在不更改其資料的情況下為陣列賦予新形狀。
在這里,我們重塑了陣列B,以便以后可以將其相乘:
import numpy as np
A=np.array([[1, 2, 3],
[4, 5, 6],
[7 , 8, 9]])
t = np.linspace(0,1,2)
B = 0.02109*np.exp(-t)
P = B.reshape(-1, 1, 1) * A
print(P)
numpy張量點
在此處查找檔案: 鏈接
給定兩個張量 a 和 b,以及一個包含兩個類陣列物件 (a_axes, b_axes) 的類陣列物件,將 a 和 b 的元素(分量)在 a_axes 和 b_axes 指定的軸上的乘積相加。第三個引數可以是單個非負整數類標量 N;如果是這樣,則將 a 的最后 N 個維度和 b 的前 N ??個維度相加。
import numpy as np
A=np.array([[1, 2, 3],
[4, 5, 6],
[7 , 8, 9]])
t = np.linspace(0,1,2)
B = 0.02109*np.exp(-t)
P = np.tensordot(B, A, 0)
print(P)
numpy einsum(愛因斯坦求和)
在此處查找檔案: 鏈接
import numpy as np
A=np.array([[1, 2, 3],
[4, 5, 6],
[7 , 8, 9]])
t = np.linspace(0,1,2)
B = 0.02109*np.exp(-t)
P = np.einsum('ij,k', A, B)
print(P)
注意:A有兩個維度,我們為它們的索引分配 ij。B有一個維度,我們將 k 分配給它的索引
手動回圈
另一種簡單的方法是回圈(對于給定的輸入比 tensordot 更快)。如果您出于某種原因不想使用 numpy,則可以將這種方法設為“無 numpy”。這是帶有 numpy 的版本:
import numpy as np
A=np.array([[1, 2, 3],
[4, 5, 6],
[7 , 8, 9]])
t = np.linspace(0,1,2)
B = 0.02109*np.exp(-t)
products = []
for b in B:
products.append(b*A)
P = np.array(products)
print(P)
#or the same as one-liner: np.asarray([A * elem for elem in B])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/487599.html
上一篇:計算一維numpy陣列中的間隙數
下一篇:以每行的最大值反轉順序
