直截了当。接下来的语句具有交换python 2D列表的两个列表元素的内容的效果:
a = [[1,2,3],
[4,5,6]]
b = [[7,8,9],
[10,11,12]]
tmp = a[1]
a[1] = b[1]
b[1] = tmp
输出:
a = [[1,2,3],
[10,11,12]]
b = [[7,8,9],
[4,5,6]]
对于numpy数组类型,这不会发生。
a = np.array([[1,2,3],
[4,5,6]])
b = np.array([[7,8,9],
[10,11,12]])
tmp = a[1]
a[1] = b[1]
b[1] = tmp
输出:
a = array([[ 1, 2, 3],
[10, 11, 12]])
b = array([[ 7, 8, 9],
[10, 11, 12]])
为什么会这样?
答案 0 :(得分:3)
列表列表是嵌套对象。 NumPy数组不是嵌套的,而是2D。 2D列表没有概念。所以你在列表中有一个列表。而在NumPy中,它只是一个对象。
NumPy总是在索引时返回一个视图,索引的结果是另一个数组。你需要制作明确的副本:
tmp = a[1].copy()
a[1] = b[1].copy()
b[1] = tmp
让它换掉:
>>> a
array([[ 1, 2, 3],
[10, 11, 12]])
>>> b
array([[7, 8, 9],
[4, 5, 6]])
经验法则: