【问题标题】:How to slice a 2d matrix using lists in python? [duplicate]如何使用python中的列表对二维矩阵进行切片? [复制]
【发布时间】:2018-05-01 15:25:52
【问题描述】:

在这个例子中:

In [19]: a[[1,2,3],[1,2,3]].shape
Out[19]: (3,)

In [20]: a[1:4,1:4].shape
Out[20]: (3, 3)

In [21]: a.shape
Out[21]: (100, 100)

为什么 Out[19] 不是 (3,3)? 我想使用列表的原因是因为我想做这样的事情:

a[[1,8,12],[34,45,50]].shape

这样结果将是一个 (3,3) 矩阵。

【问题讨论】:

  • 我相信你想在这里用花哨的索引做的事情只适用于范围对象,而不是单个行/列索引的数组。
  • 您的 a[<list>,<list>] 尝试将执行类似 zip 的操作,您的结果数组将是 [a[1,1], a[2,2], a[3,3]] - 这就是它不是 3x3 而是 3x1 的原因。

标签: python arrays numpy indexing


【解决方案1】:

np.ix_ 的完美用例:

a[np.ix_([1,8,12],[34,45,50])]

演示

a = np.arange(5 * 5).reshape(5, 5)    
a[np.ix_([1, 2, 3], [1, 2, 3])]

array([[ 6,  7,  8],
       [11, 12, 13],
       [16, 17, 18]])

【讨论】:

  • 而且比a[[1,2,3],:][:,[1,2,3]]效率更高
猜你喜欢
  • 1970-01-01
  • 2015-06-14
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
相关资源
最近更新 更多