矩阵有np.arange函数吗?

时间:2019-08-21 16:26:34

标签: python-3.x numpy

我正试图找到一种创建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)

2 个答案:

答案 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.]])

enter image description here

希望您可以看到广播是通过重复开始时填充数组中的破折号,填充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]])