Python: объединить (или клонировать) массив numpy N раз

Я хочу создать массив MxN numpy, клонируя Mx1 ndarray N раз. Есть ли эффективный питонический способ сделать это вместо цикла?

Btw для меня не работает (X - мой массив Mx1):

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

так как он создал массив [M * ​​N, 1] вместо [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

Ответ 2

Вы можете использовать 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]])

Ответ 3

Вы пробовали это:

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]]