NumPy ndarrary.view(…)在内部是如何工作的

NumPy ndarrary.view(…)在内部是如何工作的,numpy,numpy-ndarray,Numpy,Numpy Ndarray,我使用以下代码创建了一个视图,但我想了解这个视图在引擎盖下是如何工作的 >>> x = np.array([(1, 2)], dtype=np.int8) >>> y = x.view(dtype=np.int16) 在哪里可以找到ndarray.view(…),我搜索了GitHub代码库,但找不到它您最感兴趣的是什么-编码机制,或者int8值如何表示为int16 视图创建一个新数组,具有自己的形状和数据类型,但与源共享数据缓冲区。您将看到的大多数代码都与创

我使用以下代码创建了一个视图,但我想了解这个视图在引擎盖下是如何工作的

>>> x = np.array([(1, 2)], dtype=np.int8)
>>> y = x.view(dtype=np.int16)

在哪里可以找到
ndarray.view(…)
,我搜索了GitHub代码库,但找不到它

您最感兴趣的是什么-编码机制,或者
int8
值如何表示为
int16

视图
创建一个新数组,具有自己的形状和数据类型,但与源共享数据缓冲区。您将看到的大多数代码都与创建新数组有关,而与特定的数据类型几乎无关

实际上有两个版本的
int16
,大端和小端

In [194]: np.array([(1,2)],np.int8).view('<i2')                                 
Out[194]: array([[513]], dtype=int16)
In [195]: np.array([(1,2)],np.int8).view('>i2')                                 
Out[195]: array([[258]], dtype=int16)

我猜你不会在
numpy
C代码中看到这种详细程度。它是由C编译器执行的。

Hi@hpaulj,感谢您的回复,基本上我正在尝试理解numpy视图(…)背后的机制。正如阵列广播在幕后由多个迭代器支持一样,这个视图(…)也由一些迭代器或其他东西支持,我想看看一些源代码来理解它,或者一些博客/论坛讨论视图(…)的内部结构如何获得可以使数组具有原始数组中的备用元素的视图,例如:-array1=np.array([1,2,3,4,5])和array2=array1.view(),这提供了原始数组中的所有元素,但如何创建仅具有原始数组中的备用项的视图,如[1,3,5],仅使用numpy视图(…)是否还有其他方法可以实现?
视图
方法并不是创建
视图
:)基本索引的唯一方法,即使用切片也可以创建视图:
arr[::2]
。如其文档所示,视图方法有两个用途,即更改
dtype
和更改子类
type
In [197]: 2*256+1                                                               
Out[197]: 513
In [198]: 1*256+2                                                               
Out[198]: 258