首页 > 解决方案 > Numpy ndarray 视图方法和基本属性

问题描述

在 Numpy 中,我们可以创建一个新的数组对象,使用 view 方法从另一个数组对象中查看相同的数据。

这将使数组的浅对象。新数组将具有与现有数组相同的数据(实际上是对它的引用),因此新数组的数据部分将只是对现有数组数据的引用!(我们可以调整新数组的大小而无需更改旧数组形状,但即使修改了旧数组元素,它们仍将具有相同的数据)。

例如:

>>>import numpy as np
>>>a = np.array([1,2,3,4])
>>>c = a.view()
>>>c
array([1,2,3,4])

c 是 a 的浅拷贝(它们引用相同的数据但不引用相同的对象):

>>>a is c
False

但是,如果我们将 c.base 测试为 a,它会给出 True:

>>>c.base is a
True

知道两者都是 ndarry 对象:

>>>type(a)
<class 'numpy.ndarray'>
>>> type(c)
<class 'numpy.ndarray'>

如果我们测试 a 和 c 的类型,我们会发现:

>>> type(a.base)
<class 'NoneType'>
>>> type(c.base)
<class 'numpy.ndarray'>

我的问题是:-
.base 属性到底是什么(它是 ndarray 对象中的数据部分)?
- 为什么 a 和 c 有不同类型的 .base?

标签: pythonarraysnumpy

解决方案


根据numpy 文档

array.base如果内存来自其他对象,则为基础对象。

如果对象拥有它的内存,则基为无,但如果一个对象与另一个对象共享内存(例如它的视图),则基将是该内存的所有者对象。在您的示例中,c.base是拥有内存的对象,即a.


推荐阅读