如何有效地选择NumPy数组的一部分?

时间:2015-08-22 20:42:30

标签: arrays matlab numpy

我从Matlab / octve切换到Numpy / Scipy。

要选择一个Matlab数组的片段,这很容易。 例如

>> x = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12]
x =

     1     2     3     4
     5     6     7     8
     9    10    11    12

>> y = x(2:3, 1:2)

y =

     5     6
     9    10

时,如何使用NumPy完成同样的事情
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

1 个答案:

答案 0 :(得分:1)

在NumPy文档中提到Indexing > Other indexing options

  

切片和跨步的工作原理与列表和元组完全相同,只是它们也可以应用于多个维度。

对于您的示例,这意味着

import numpy as np
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
# array([[ 1,  2,  3,  4],
#        [ 5,  6,  7,  8],
#        [ 9, 10, 11, 12]])

x[1:3, 0:2]
# => array([[ 5,  6],
#           [ 9, 10]])

与Matlab最显着的区别可能是索引是从零开始的(即,第一个元素具有索引0)并且索引范围(在Python中称为“切片”)用独占上限表示:{ {1}}获取l[4:7]l[4]l[5](第3到第7个元素),但不是l[6](第8个元素)。

Python tutorial's section on lists将让您了解索引和切片如何适用于普通(1维)集合。