簡體   English   中英

numpy-創建數組副本的多維數組

[英]Numpy - create a multidimensional array of a copy of an 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] ]

我可以用nums = np.arange(0, 6)生成第一個[0,1,2,3,4,5],但是如果我將一個列表中的數字乘以它會增加值= [nums* 3] = [0,3,6,9,12,15] 我怎樣才能做到這一點 ?

使用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)

如果您要擴展一個預先存在的一維數組,則第一種方法很有用。 如果您嘗試從頭開始創建數組,則第二種方法更簡單。

順便說一句,為什么不像下面這樣簡單地使用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]])

您不能將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.

如果要對數組重復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]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM