创建2d numpy数组的快速方法是什么?

时间:2017-11-05 07:46:06

标签: python numpy

我正在创建这个数组:

>>> np.array([[0,1,2,3,4,5],[10,11,12,13,14,15],[20,21,22,23,24,25],[30,31,32,33,34,35],[40,41,42,43,44,45],[50,51,52,53,54,55]])

array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])

我正在输入所有元素

3 个答案:

答案 0 :(得分:4)

嗯,如果你已经不介意使用辅助列表,你总是可以使用列表理解:

>>> np.array([list(range(i, i + 6)) for i in range(0, 55, 10)])
array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])

这是使用广播的numpy方式:

>>> np.arange(0, 51, 10).reshape(-1, 1) + np.arange(6)
array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])

这种方法,特别是对于较大的示例,将更快,并且需要更少的辅助存储。

答案 1 :(得分:3)

您可以使用mgrid类实例。

[[ 0  1  2  3  4  5]
 [10 11 12 13 14 15]
 [20 21 22 23 24 25]
 [30 31 32 33 34 35]
 [40 41 42 43 44 45]
 [50 51 52 53 54 55]]

<强>输出

sum

一个小变化是使用Numpy a = np.sum(np.mgrid[:60:10, :6], axis=0) 函数来执行两个数组的添加:

+

但是,正如user2357112在评论中提到的那样,使用ogrid运算符进行添加而不是调用函数会更有效。

他还提到我们可以使用y来创建列和行数组,这会占用ximport numpy as np y, x = np.ogrid[:60:10, :6] a = y + x print(y, x, a, sep='\n\n') 更少的内存。而且它也更快。

 [10]
 [20]
 [30]
 [40]
 [50]]

[[0 1 2 3 4 5]]

[[ 0  1  2  3  4  5]
 [10 11 12 13 14 15]
 [20 21 22 23 24 25]
 [30 31 32 33 34 35]
 [40 41 42 43 44 45]
 [50 51 52 53 54 55]]

输出

{{1}}

答案 2 :(得分:0)

另一个选择

n=100  
i=1
while [ $i -lt $n ]
do
echo $i
i=$(( $i+1 ))
done

输出:

np.array([np.arange(i, i+6) for i in range(56)[::10]])