【发布时间】:2019-06-16 02:38:41
【问题描述】:
我想交换二维数组中的行。为此使用高级切片非常方便:
In [50]: l
Out[50]: [[0, 1], [2, 3], [4, 5], [6, 7]]
In [51]: l[::2], l[1::2] = l[1::2], l[::2]
In [52]: l
Out[52]: [[2, 3], [0, 1], [6, 7], [4, 5]]
但是,如果我将列表转换为 Numpy 数组,这将不起作用:
In [60]: arr
Out[60]:
array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])
In [61]: arr[::2], arr[1::2] = arr[1::2], arr[::2]
In [62]: arr
Out[62]:
array([[2, 3],
[2, 3],
[6, 7],
[6, 7]])
为什么这种交换方法不适用于 Numpy 数组?
【问题讨论】:
-
您是在问为什么 Numpy 数组处理切片的方式不同,还是希望在使用 Numpy 数组时获得相同的结果? 为什么不是一个很有用的问题,而且太宽泛,无法在这里回答。
-
怎么样? l = 列表(arr); l[::2], l[1::2] = l[1::2], l[::2]; arr = np.array(l);
-
@MartijnPieters:我在问为什么这种特殊的交换方法对列表有效,而对 numpy 数组无效。为什么这意味着“为什么他们的行为不同”。
-
@DmytroPrylipko:广泛的答案是 numpy 数组不是列表。它们是矩阵并支持更丰富的索引语法。 Python 列表是一维的野兽,列表中有列表对象,因此您只处理最外层的列表。 Numpy 数组是真正的多维矩阵,不仅对行进行切片。