我正试图找到一种创建numpy数组的方法,就像np.arange(start,stop,step)一样,但是让我将数组选为2D形状,例如将数组的线条作为元素从“开始”到“停止”,列将是该行元素的重复。 因为这样做不是最佳选择;
import numpy as np
x=np.array([0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]).reshape(6,3)
答案 0 :(得分:2)
由于广播,如果将行(图中的红色)添加到零的列(图中的蓝色),您还将获得所需的内容:
np.arange(0, 6) + np.zeros((3,1))
结果
([[0., 1., 2., 3., 4., 5.],
[0., 1., 2., 3., 4., 5.],
[0., 1., 2., 3., 4., 5.]])
希望您可以看到广播是通过重复开始时填充数组中的破折号,填充M
行和N
列变为2 MxN
数组,然后将它们添加在一起。
如果您希望梯度从上到下而不是从左到右运行,则需要在将零行添加到一行之前将递增的行重整为一列:
np.arange(6).reshape(-1,1) + np.zeros((1,8))
结果
[0., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 1., 1., 1., 1., 1., 1.],
[2., 2., 2., 2., 2., 2., 2., 2.],
[3., 3., 3., 3., 3., 3., 3., 3.],
[4., 4., 4., 4., 4., 4., 4., 4.],
[5., 5., 5., 5., 5., 5., 5., 5.]
如果您想教孩子们时间表,请:-)
np.arange(1,13).reshape(-1,1) * np.arange(1,13)
结果
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
[ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24],
[ 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36],
[ 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48],
[ 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60],
[ 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72],
[ 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84],
[ 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96],
[ 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108],
[ 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120],
[ 11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132],
[ 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144]]
答案 1 :(得分:1)
您可以按照hpaulj的建议使用np.repeat
,但是首先需要向np.arange
创建的数组中添加新轴。
np.repeat(np.arange(0, 6)[np.newaxis,:], 3, axis=0)
# array([[0, 1, 2, 3, 4, 5],
# [0, 1, 2, 3, 4, 5],
# [0, 1, 2, 3, 4, 5]])