用整数序列填充2D数组更具Pythonic/优雅的方式?
我想创建一个6x6 numpy矩阵,第一行填充:用整数序列填充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
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]])