python - 用整数序列填充二维数组的更 Pythonic/优雅的方法?

标签 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。我无法让这两个想法中的任何一个发挥作用。

下面是我构建这个矩阵的非矢量化/循环代码。有没有更 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/

相关文章:

Python:如何在 numpy 中使用函数?

Python strptime 或用于复杂日期字符串解析的替代方法

c - 在 C 中用数组绘制轨迹图

python - 将不在我的 git 存储库中的文件推送到 Heroku。

c - 如何只用一些值初始化数组的几个元素?

python - 交错两个 numpy 索引数组,每个数组中的一项

python - Numpy 将 long int 转换为 float 时丢失精度

python - 用于 python 源的 Windows GUI 应用程序?

python - 将所有文档的列更新为Elasticsearch的最佳实践

python - python 中的分箱数据(散点图​​)?