N维数组 - Python/Numpy

4

我想知道是否有巧妙的方法来做以下事情。

我有一个表示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是否支持类似此功能的东西?


有任何想法吗?

3个回答

10

是的,在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])

2

你可以使用zip函数来转置一个由列表表示的矩阵:

>>> zip(*grid)[0]
(1, 4, 7)

如果需要更多的功能,我会使用Numpy。


1

要在Python中获取列,您可以使用:

[row[0] for row in grid]
>>> [1,4,7]

你可以重写获取行的代码为

grid[0][:]

因为[:]只是复制整个数组,所以不需要添加索引。

然而,根据你想要实现的目标,我建议最好编写一个小型矩阵类来隐藏这些实现细节。


3
不要编写自己的矩阵类,使用已提供的优秀矩阵类即可。 - eumiro
@eumiro:你说得完全正确。你有特定的课程想法吗? - Georg Schölly
@eumiro:在我看来,Numpy 在许多情况下似乎有点过度了。据我所知,甚至需要安装二进制文件。 - Georg Schölly
有一个适用于numpy的Debian/Ubuntu/(其他)软件包。一旦安装,它将始终运行。 - eumiro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接