我想通过克隆一个Mx1ndarray N次来创建一个MxN numpy数组。有没有一种高效的Python方法来代替循环?顺便说一句,下面的方法对我不起作用(X是我的Mx1数组):
numpy.concatenate((X, numpy.tile(X,N)))
因为它创建了一个[M*N,1]数组而不是[M,N]
6rvt4ljy1#
你很接近了,你想使用np.tile,但是像这样:
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行为
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
zd287kbt2#
可以使用vstack:
numpy.vstack([X]*N)
或数组(归功于下面的bluenote10):
numpy.array([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]])
v8wbuo2f3#
你试过这个吗:
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]]
kcugc4gi4#
np.vstack的替代方案是np.array,可以这样使用(@bluenote10在评论中也提到了):
np.vstack
np.array
x = np.arange([-3,4]) # array([-3, -2, -1, 0, 1, 2, 3]) N = 3 # number of time you want the array repeated X0 = np.array([x] * N)
给出:
array([[-3, -2, -1, 0, 1, 2, 3], [-3, -2, -1, 0, 1, 2, 3], [-3, -2, -1, 0, 1, 2, 3]])
你也可以这样使用meshgrid(当然它写起来比较长,有点扯头发,但你会得到另一种可能性,你可能会学到一些新的东西):
meshgrid
X1,_ = np.meshgrid(a,np.empty([N]))
>>> X1显示:
>>> X1
检查所有这些是否等价:
X0 == X1结果:
X0 == X1
array([[ True, True, True, True, True, True, True], [ True, True, True, True, True, True, True], [ True, True, True, True, True, True, True]])
X0 == np.vstack([x] * 3)结果:
X0 == np.vstack([x] * 3)
X0 == np.tile(x,(N,1))结果:
X0 == np.tile(x,(N,1))
4条答案
按热度按时间6rvt4ljy1#
你很接近了,你想使用
np.tile
,但是像这样:结果:
如果您调用
np.tile(a,3)
,您将获得与您看到的一样的concatenate
行为http://docs.scipy.org/doc/numpy/reference/generated/numpy.tile.html
zd287kbt2#
可以使用vstack:
或数组(归功于下面的bluenote10):
例如
v8wbuo2f3#
你试过这个吗:
打印:
kcugc4gi4#
np.vstack
的替代方案是np.array
,可以这样使用(@bluenote10在评论中也提到了):给出:
你也可以这样使用
meshgrid
(当然它写起来比较长,有点扯头发,但你会得到另一种可能性,你可能会学到一些新的东西):>>> X1
显示:检查所有这些是否等价:
X0 == X1
结果:
X0 == np.vstack([x] * 3)
结果:
X0 == np.tile(x,(N,1))
结果: