gpt4 book ai didi

python - numpy asarray() 是否引用原始列表

转载 作者:太空宇宙 更新时间:2023-11-03 13:43:14 24 4
gpt4 key购买 nike

我有一个很长的列表列表,我正在使用 numpy.asarray() 将它转换为一个 numpy 数组,在获取这个矩阵后删除原始列表是否安全,或者新创建的 numpy 数组是否也会受到影响通过这个 Action ?

最佳答案

我很确定数据不会共享,您可以安全地删除列表。您的原始 matrix 是 Python 对象的嵌套结构,数字本身也是 Python 对象,可以位于内存中的任何位置。 Numpy 数组也是一个对象,但它或多或少是一个包含数据维度和类型的 header ,带有指向连续数据 block 的指针,其中所有数字都尽可能接近“原始数字” .这两种不同的方式无法共享数据,因此大概是在创建 Numpy 数组时复制了数据。示例:

In [1]: m = [[1,2,3],[4,5,6],[7,8,9]]
In [2]: import numpy as np
In [3]: M = np.array(m)
In [4]: M[1,1] = 55
In [5]: M
Out[5]:
array([[ 1, 2, 3],
[ 4, 55, 6],
[ 7, 8, 9]])
In [6]: m
Out[6]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # original is not modified!

请注意,Numpy 数组可以彼此共享数据,例如当您将切片放入数组时。这称为“ View ”,因此如果您修改子集中的数据,原始数组中的数据也会发生变化:

In [18]: P = M[1:, 1:]
In [19]: P[1,1] = 666
In [20]: P
Out[20]:
array([[ 55, 6],
[ 8, 666]])
In [21]: M
Out[21]:
array([[ 1, 2, 3],
[ 4, 55, 6],
[ 7, 8, 666]]) # original is also modified!

关于python - numpy asarray() 是否引用原始列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25714046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com