我想知道是否有巧妙的方法来做以下事情。
我有一个表示3x3网格的N维数组
grid = [[1,2,3],
[4,5,6],
[7,8,9]]
为了得到第一行,我会按以下步骤进行:
grid[0][0:3]
>> [1,2,3]
为了获取第一列,我希望能像这样做(即使这是不可能的):
grid[0:3][0]
>> [1,4,7]
NumPy是否支持类似此功能的东西?
有任何想法吗?
是的,在Numpy中有类似的功能:
import numpy as np
grid = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
grid[0,:]
# array([1, 2, 3])
grid[:,0]
# array([1, 4, 7])
你可以使用zip
函数来转置一个由列表表示的矩阵:
>>> zip(*grid)[0]
(1, 4, 7)
如果需要更多的功能,我会使用Numpy。
要在Python中获取列,您可以使用:
[row[0] for row in grid]
>>> [1,4,7]
你可以重写获取行的代码为
grid[0][:]
因为[:]
只是复制整个数组,所以不需要添加索引。
然而,根据你想要实现的目标,我建议最好编写一个小型矩阵类来隐藏这些实现细节。