Mx1 ndarrayをN回複製して、MxN numpy配列を作成します。ループの代わりにそれを行う効率的なPythonの方法はありますか?
ところで、次の方法はうまくいきません(Xは私のMx1配列です):
numpy.concatenate((X, numpy.tile(X,N)))
[M、N]ではなく[M * N、1]配列を作成したため
あなたは近い、あなたは_np.tile
_を使いたいが、このように:
_a = np.array([0,1,2])
np.tile(a,(3,1))
_
結果:
_array([[0, 1, 2],
[0, 1, 2],
[0, 1, 2]])
_
np.tile(a,3)
を呼び出すと、あなたが見たようなconcatenate
動作が得られます
_array([0, 1, 2, 0, 1, 2, 0, 1, 2])
_
http://docs.scipy.org/doc/numpy/reference/generated/numpy.tile.html
vstack を使用できます。
numpy.vstack([X]*N)
例えば.
>>> import numpy as np
>>> X = np.array([1,2,3,4])
>>> N = 7
>>> np.vstack([X]*N)
array([[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]])
これを試しましたか:
n = 5
X = numpy.array([1,2,3,4])
Y = numpy.array([X for _ in xrange(n)])
print Y
Y[0][1] = 10
print Y
プリント:
[[1 2 3 4]
[1 2 3 4]
[1 2 3 4]
[1 2 3 4]
[1 2 3 4]]
[[ 1 10 3 4]
[ 1 2 3 4]
[ 1 2 3 4]
[ 1 2 3 4]
[ 1 2 3 4]]