Numpy - 创建一个数组副本的多维数组

问题描述 投票:1回答:4

我想生成一个有序数字的数组,然后将它乘以另一个数组:

[ [0,1,2,3,4,5] [0,1,2,3,4,5] [0,1,2,3,4,5] ... [0,1,2,3,4,5] ]

我可以使用nums = np.arange(0, 6)生成第一个[0,1,2,3,4,5]但是如果我乘以列表中的数字,它只会增加值= [nums* 3] = [0,3,6,9,12,15]。我怎样才能做到这一点 ?

python arrays numpy multidimensional-array numpy-ndarray
4个回答
3
投票

使用numpy方法(numpy.repeatnumpy.expand_dims):

np.repeat(np.expand_dims(np.arange(0,6), axis=0), repeats=5, axis=0)

array([[0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5]])

或者,更简单:

np.repeat([np.arange(0,6)],repeats=5, axis=0)

如果您尝试扩展预先存在的一维数组,则第一种方法很有用。如果您尝试从头开始创建数组,则第二种方法更简单。


2
投票

顺便说一句,为什么不简单地使用np.array(),如:

In [147]: nums = np.arange(6)

In [148]: nums
Out[148]: array([0, 1, 2, 3, 4, 5])

In [149]: [nums] * 5
Out[149]: 
[array([0, 1, 2, 3, 4, 5]),
 array([0, 1, 2, 3, 4, 5]),
 array([0, 1, 2, 3, 4, 5]),
 array([0, 1, 2, 3, 4, 5]),
 array([0, 1, 2, 3, 4, 5])]

In [150]: np.array([nums] * 5)
Out[150]: 
array([[0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5]])

在一行:

In [151]: np.array([np.arange(6)] * 5)
Out[151]: 
array([[0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5]])

1
投票

你不能将一个numpy数组与一个标量相乘,并期望与一个python列表(或字符串)与一个标量相乘的行为相同。

对于numpy,乘法运算符将在所有数组元素上广播乘法:

np.array([1,2,3]) * 2 == np.array([1*2, 2*2, 3*2) == np.array([2,4,6])

相反,您可以使用列表理解

np.array([np.arange(6) for _ in range(4)])
array([[0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5]])

或通过乘法生成列表列表,然后转换为numpy数组和重塑:

np.array([list(range(6))*4]).reshape(4,6)
array([[0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5],
       [0, 1, 2, 3, 4, 5]])

或者,生成一个形状(1,6)的数组并沿第一轴重复:

np.repeat(np.arange(6).reshape(1,6), repeats=4, axis=0)
# produces the same output as the example outputs above.

0
投票

如果要复制X次数组,简单的方法是:

X = 3
[list(range(6)) for i in range(X)]

输出:

[[0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5]]
© www.soinside.com 2019 - 2024. All rights reserved.