用整数序列填充2D数组更具Pythonic/优雅的方式?

用整数序列填充2D数组更具Pythonic/优雅的方式?,python,arrays,numpy,range,Python,Arrays,Numpy,Range,我想创建一个6x6 numpy矩阵,第一行填充:0,1,…,5,第二行填充10,11,15,最后一行填充了50,51,55 我考虑使用(1)嵌套(两层)列表理解,然后将列表转换为numpy.matrix对象,或者(2)使用range函数中的变量,即-range(x)并将x从1变为6。我无法让这两个想法中的任何一个发挥作用 下面是我构造这个矩阵的非矢量化/循环代码。有没有更像蟒蛇的方法 a = np.zeros((6,6)) for i in range(6): for j in rang

我想创建一个6x6 numpy矩阵,第一行填充:
0,1,…,5
,第二行填充
10,11,15,最后一行填充了
50,51,55

我考虑使用(1)嵌套(两层)列表理解,然后将列表转换为
numpy.matrix
对象,或者(2)使用
range
函数中的变量,即-
range(x)
并将
x
从1变为6。我无法让这两个想法中的任何一个发挥作用

下面是我构造这个矩阵的非矢量化/循环代码。有没有更像蟒蛇的方法

a = np.zeros((6,6))
for i in range(6):
    for j in range(6):
        a[i,j] = 10*i + j
print(a)
(这是Youtube上的
NumPy
介绍视频39:00给出的示例之一: 怎么样

详细信息
ogrid
返回一个开放的网格:

a, b = np.ogrid[:60:10, :6]
a

# array([[ 0],
#        [10],
#        [20],
#        [30],
#        [40],
#        [50]])

b
# array([[0, 1, 2, 3, 4, 5]])
然后,您可以执行广播添加:

# a + b
np.add(a, b)

# 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]])

同样,您也可以使用
np.arange
生成两个范围并添加它们:

np.arange(0, 60, 10)[:,None] + 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]])

这可以通过广播来实现

arange(0, 6) + 10*arange(0, 6)[:, None]

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时,这并不重要。有时迭代、列表理解和其他pythonic方法可以很好地使用数组,有时效率非常低。但是,给出的链接涵盖了一些使用numpy非常强大的高级概念。

非常有趣的解决方案。非常感谢!
arange(0, 6) + 10*arange(0, 6)[:, None]

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]])