我有一個像 np.array([1, 2, 3]) 這樣的 numpy 數組不使用 for 循環,只使用 numpy 或 pytorch 方法,我想要一個維度為 len(array) * N * M 的矩陣,由 N*M 矩陣組成,第一個矩陣由所有矩陣組成,第二個矩陣僅由兩個值組成,第三只有 3 個值。即時N = 4 M = 3
[[[1,1,1,1],[1,1,1,1],[1,1,1,1]],
[[2,2,2,2],[2,2,2,2],[2,2,2,2]],
[[3,3,3,3],[3,3,3,3],[3,3,3,3]]]我嘗試了不同的方法來實現這個矩陣,比如 unsqueeze 和 repeat 但我找不到解決方案,有什么建議嗎?
2 回答

LEATH
TA貢獻1936條經驗 獲得超7個贊
干得好:
np.ones((len(a),M,N)) * a[:,None,None]
或者沒有乘法:
np.full((len(a),M,N), a[:,None,None])
輸出:
array([[[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]], [[2., 2., 2., 2.], [2., 2., 2., 2.], [2., 2., 2., 2.]], [[3., 3., 3., 3.], [3., 3., 3., 3.], [3., 3., 3., 3.]]])
請注意此處的形狀和預期輸出中給出的形狀是len(a) * M * N
,而不是len(a) * N * M
。M,N
如果需要,可以交換np.ones
。

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
在 PyTorch 中你可以使用expand
a_t = torch.from_numpy(a)
a_t[:,None,None].expand(len(a_t), M, N)
tensor([[[1, 1, 1, 1],
? ? ? ? ?[1, 1, 1, 1],
? ? ? ? ?[1, 1, 1, 1]],
? ? ? ? [[2, 2, 2, 2],
? ? ? ? ?[2, 2, 2, 2],
? ? ? ? ?[2, 2, 2, 2]],
? ? ? ? [[3, 3, 3, 3],
? ? ? ? ?[3, 3, 3, 3],
? ? ? ? ?[3, 3, 3, 3]]], dtype=torch.int32)
另一種方法是使用repeat
a_t[:,None,None].repeat(1,?M,?N)
這類似于 numpy?tile
-?np.tile(a[:,None,None], (1,M,N))
添加回答
舉報
0/150
提交
取消