58

我是 Python 和 numpy 的新手。我已经弄清楚如何对一维序列进行切片:arr[start:end],并访问数组中的元素:el = arr[row][col]

尝试类似slice = arr[0:2][0:2]arrnumpy 数组在哪里)不会给我前 2 行和列,而是重复前 2 行。我刚刚做了什么,如何沿着另一个维度进行切片?

4

1 回答 1

85

如果您使用numpy,这很容易:

slice = arr[:2,:2]

或者如果你想要 0,

slice = arr[0:2,0:2]

你会得到同样的结果。

*注意这slice实际上是内置类型的名称。一般来说,我建议给你的对象一个不同的“名字”。


另一种方式,如果您正在使用列表*:

slice = [arr[i][0:2] for i in range(0,2)]

(请注意,这里的 0 是不必要的: [arr[i][:2] for i in range(2)]也可以。)。

我在这里所做的是一次取每个所需的行 1 ( arr[i])。然后我从该行中切出我想要的列并将其添加到我正在构建的列表中。

如果你天真地尝试:arr[0:2]你得到前 2 行,如果你再切片arr[0:2][0:2],你只是再次切片前两行。

*这实际上也适用于 numpy 数组,但与我在上面发布的“本机”解决方案相比它会很慢。

于 2013-06-24T13:48:19.637 回答