-1
我有一個3d np.array x
,其中x.shape == (r, n, m)
。如何有效地乘以每個子陣列單獨的3d np.array的第一維,Python 3
這意味着單獨的尺寸r
,每個元素是一個二維數組n-by-m
。 對於每個2d陣列,我想乘以一個向量。
這是一個例子。
import bumpy as np
x = np.array([[[1, 2, 3, 4],
[4, 5, 6, 7],
[7, 8, 9, 10]],
[[4, 5, 6, 7],
[7, 8, 9, 10],
[10, 11, 12, 13]],
[[7, 8, 9, 10],
[10, 11, 12, 13],
[13, 14, 15, 16]]])
所以x.shape
是(r=3, n=3, m=4)
。單獨的第一尺寸有三個二維陣列
r1 = [[1, 2, 3, 4],
[4, 5, 6, 7],
[7, 8, 9, 10]]
r2 = [[4, 5, 6, 7],
[7, 8, 9, 10],
[10, 11, 12, 13]]
r3 = [[7, 8, 9, 10],
[10, 11, 12, 13],
[13, 14, 15, 16]]]
對於每個二維陣列,我要完成相同的操作:在第一行是由k**(n-1)
相乘,第二行是通過k**(n-2)
相乘,等等。最後一行乘以k**(n-n)
。
採取r1
例如:
k = 0.9
n = 3
r1_operated = np.empty_like(r1)
r1_operated[0] = r1[0] * k**(n-1) # n = 3, so (n-1) = 2
r1_operated[1] = r1[1] * k**(n-2) # n = 3, so (n-2) = 1
r1_operated[1] = r1[2] * k**(n-n) # n = 3, so (n-n) = 0
上面我所編寫的是醜陋的,並且可以很粗短如果r
和n
是非常大的。
你知道任何優雅和有效的方法來編碼這種算法嗎?
我正在使用Python3。謝謝!
優秀!謝謝! – aura