关于np.array函数中的布尔参数副本

时间:2019-03-09 05:38:18

标签: python numpy

我不了解np.array函数中参数copy = True的重要性。我查阅了文档,但听不懂。请您用简单的文字解释一下

1 个答案:

答案 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,文档仍会解释要创建副本。

  1. 如果__array__返回副本。当您通过objnp.array(obj)转换为numpy数组时,如果obj.__array__返回其数组内容的副本,则numpy对象还将包含一个副本。

  2. 或者如果需要复制以满足其他要求。

这是一个例子。

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