拡張配列に新しいメモリを割り当てるかどうか、または元の配列の既存のメモリの新しいビューを必要とするかどうかを決定する必要があることに注意してください。
PyTorchでは、この区別によって2つの方法expand()
とrepeat()
が発生します。前者は、ストライドを0に設定することで、サイズ1のディメンションがより大きなサイズに展開される既存のテンソルの新しいビューを作成します。新しいメモリを割り当てることなく、サイズ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.repeat()
を超えてnp.tile()
をお勧めします。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」には「タイル」と「リピート」があります。それらを使うと 'M [None、...] 'が必要になるかもしれません。 – hpaulj
あなたはただそれを放送することができます。 (私はPyTorchがまだ放送しているかどうかは確かではないが、最近(実装されている)(https://github.com/pytorch/pytorch/pull/1563)、利用可能かどうかはわからない。 – user2357112
[ expand](http://pytorch.org/docs/tensors.html#torch.Tensor.expand)のような手動放送のようなものです。 – user2357112