請注意,您需要決定是否要爲擴展陣列分配新內存,或者是否僅需要原始陣列現有內存的新視圖。
在PyTorch中,這種區別產生了兩種方法expand()
和repeat()
。前者僅創建一個關於現有張量的新視圖,其中第一個尺寸的尺寸通過將步幅設置爲0擴展到更大尺寸。任何尺寸1的尺寸都可以擴展爲任意值,而無需分配新內存。相反,後者複製原始數據並分配新的內存。
在PyTorch,你可以使用expand()
和repeat()
如下爲您的目的:
import torch
L = 10
N = 20
A = torch.randn(L,L)
A.expand(N, L, L) # specifies new size
A.repeat(N,1,1) # specifies number of copies
在numpy的,也有方法可以實現你上面更優雅和高效的方式做了什麼,衆說紛紜。爲了您的特殊目的,我會推薦np.tile()
超過np.repeat()
,因爲np.repeat()
被設計爲對陣列的特定元素進行操作,而np.tile()
被設計爲對整個陣列進行操作。因此,
import numpy as np
L = 10
N = 20
A = np.random.rand(L,L)
np.tile(A,(N, 1, 1))
'numpy'有'tile'和'repeat'。使用它們可能需要'M [無,...]' – hpaulj
您可能只能播放它。 (我不確定PyTorch是否已經播出;最近它已被[實施](https://github.com/pytorch/pytorch/pull/1563),但我不確定它是否可用。) – user2357112
還有[展開](http://pytorch.org/docs/tensors.html#torch.Tensor.expand),這有點像手動廣播。 – user2357112