簡體   English   中英

numpy einsum與'...'

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM