我想在python中使用两个元素。当元素本身是一个数字时,它起作用。但是当元素本身是一个数组时,它失败了。有谁能告诉我这是什么原因吗?谢谢你的帮助。详情如下。
import numpy as np
# Section 1
points = np.array([1, 2, 3, 4])
temp = points[0]
points[0] = points[1]
points[1] = temp
print(points)
# This will print [2 1 3 4] and it works
# Section 2
points = np.array([[1, 2], [2, 3], [3, 4]])
temp = points[0]
points[0] = points[1]
points[1] = temp
# This will print
#[[2 3]
# [2 3]
# [3 4]] which fails
我想知道为什么在使用相同的方法时会失败。我尝试将第2节中的temp = points[0]
更改为temp = points[0].copy()
,并且可以正常工作。但是由于temp
首先得到元素。为什么在后面的points[1] = temp
行中发生了变化?
2条答案
按热度按时间o7jaxewo1#
当你有一个超过1维的numpy数组时,用整数索引它会返回一个视图。
注意,OWNDATA为false!
每当你索引到一个单独的元素时,numpy都会返回一个新的、独立的“装箱”对象:
w1e3prcc2#
当执行
temp = points[0]
时,您正在创建对数组第一行的引用,而不是创建具有相同值的新数组。因此,之后对points
所做的任何更改都将更改temp
。这种行为特定于numpy数组(也包括torch和tensorflowTensor),它不适用于原生python列表。