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