N维数组 - Python/Numpy

4 投票
3 回答
1137 浏览
提问于 2025-04-16 10:30

我在想有没有什么聪明的方法来做以下事情。

我有一个N维数组,表示一个3x3的网格

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 个回答

1

在Python中,如果你想获取列,可以使用:

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

你可以把获取行的代码改成这样:

grid[0][:]

因为 [:] 只是把整个数组复制了一遍,不需要加索引。

不过,根据你想要实现的目标,我觉得最好是写一个简单的矩阵类,这样可以把这些实现细节隐藏起来。

2

你可以用 zip 来转置一个用列表表示的矩阵,也就是一个列表里面又有很多个列表:

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

如果要做的事情比这更复杂,我就会用 Numpy 这个库了。

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])

撰写回答