web-dev-qa-db-ja.com

Python:numpy配列をN回連結(またはクローン)します

Mx1 ndarrayをN回複製して、MxN numpy配列を作成します。ループの代わりにそれを行う効率的なPythonの方法はありますか?

ところで、次の方法はうまくいきません(Xは私のMx1配列です):

   numpy.concatenate((X, numpy.tile(X,N)))

[M、N]ではなく[M * N、1]配列を作成したため

30
stelios

あなたは近い、あなたは_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

51
CoryKramer

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]])
11
atomh33ls

これを試しましたか:

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]]
1
Samy Arous