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

时间:2019-03-24 13:09:24

标签: numpy numpy-ndarray

我已经使用以下代码创建了一个视图,但我想了解该视图在幕后的工作原理,

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

在哪里找到ndarray.view(...)的源代码,我搜索了GitHub代码存储库,但找不到它

1 个答案:

答案 0 :(得分:2)

您最感兴趣的是-编码机制,还是将int8的值表示为int16

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

实际上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)

np.int8是一个字节,最多可以表示256个值。我们看到的值取决于2个字节如何组合为1个数字。

In [197]: 2*256+1                                                               
Out[197]: 513
In [198]: 1*256+2                                                               
Out[198]: 258

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