[英]numpy einsum with '…'
下面的代碼用於在一組3d坐標上進行線性坐標變換。 變換矩陣是A
,包含坐標的數組是x
。 x
的第0軸在尺寸x,y,z上運行。 除此之外,它可以有任意形狀。
這是我的嘗試:
A = np.random.random((3, 3))
x = np.random.random((3, 4, 2))
x_prime = np.einsum('ij,j...->i...', A, x)
輸出是:
x_prime = np.einsum('ij,j...->i...', A, x)
ValueError: operand 0 did not have enough dimensions
to match the broadcasting, and couldn't be extended
because einstein sum subscripts were specified at both
the start and end
如果我明確指定x
的附加下標,則錯誤消失。 換句話說,以下工作:
x_prime = np.einsum('ij,jkl->ikl', A, x)
我希望x
能夠在第0軸之后有任意數量的軸,所以我給出的解決方法並不是最佳的。 我實際上不確定為什么第一個einsum
例子不起作用。 我正在使用numpy 1.6.1。 這是一個錯誤,還是我誤解了文檔 ?
是的,這是一個錯誤。 它已在此拉取請求中修復: https : //github.com/numpy/numpy/pull/4099
這只是在一個月前合並,所以它還需要一段時間才能達到穩定版本。
編輯 :正如@hpaulj在評論中提到的那樣,即使指定了所有索引,也可以通過添加省略號來解決此限制:
np.einsum('...ij,j...->i...', A, x)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.