我不了解np.array函数中参数copy = True的重要性。我查阅了文档,但听不懂。请您用简单的文字解释一下
答案 0 :(得分:1)
https://www.numpy.org/devdocs/reference/generated/numpy.array.html
副本:布尔,可选
如果为true(默认),则复制对象。否则,副本将 仅当
__array__
返回副本,并且obj
是嵌套序列时, 还是需要一份副本以满足其他任何要求 (dtype,order等)。
将另一个numpy数组传递给np.array
时,可以将其内容复制到内存中的新对象,也可以不这样做。通常,您要复制是因为您不想修改原始数组,但是在某些情况下这并不是一件好事。当你写
a1 = np.array([1, 2, 3])
a2 = np.array(a1, copy=False)
a1[0] = 50
print(a1)
# [50, 2, 3]
print(a2)
# [50 2 3]
不复制原始数据。当原始对象很大时,最好不要复制它以提高存储效率。
在三种情况下,即使您将副本设置为false,文档仍会解释要创建副本。
如果__array__
返回副本。当您通过obj
将np.array(obj)
转换为numpy数组时,如果obj.__array__
返回其数组内容的副本,则numpy对象还将包含一个副本。
或者如果需要复制以满足其他要求。
这是一个例子。
orig = np.array([1, 2, 3])
modified = np.array(orig, dtype=float, copy=False)
modified[0] = 50
print(modified)
# [50. 2. 3.]
print(orig)
# [1, 2, 3]
在上面的示例中,您要求numpy将所有数据转换为float
。如果不将数据复制到新对象,则无法做到这一点。因此,“需要一份副本才能满足此要求”。 numpy将忽略copy=False
。