我想创建一个 6x6 numpy 矩阵,第一行填充:0, 1, ..., 5
,第二行填充 10, 11, .. . , 15
,最后一行填入 50, 51, ... , 55
。
我考虑过使用 (1) 嵌套(两层)列表理解,然后将列表的列表转换为 numpy.matrix
对象,或者 (2) 在 range
函数内使用变量,即 - range(x)
并将 x
从 1 变为 6。我无法让这两个想法中的任何一个发挥作用。
下面是我构建这个矩阵的非矢量化/循环代码。有没有更 Pythonic 的方式来做到这一点?
a = np.zeros((6,6))
for i in range(6):
for j in range(6):
a[i,j] = 10*i + j
print(a)
(这是 39:00 在 Youtube 上 NumPy
的介绍视频中给出的示例之一:
Intro to Numerical Computing with NumPy
最佳答案
np.ogrid
怎么样? ?
np.add(*np.ogrid[:60:10, :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]])
详情
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]])
关于python - 用整数序列填充二维数组的更 Pythonic/优雅的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54796103/