我知道numpy在连续内存中存储数字。那么有没有可能
a = np.array([127,127,127,127,127,127,127,127], dtype=np.uint8)
“a”的二进制表示形式是全1
为此:
b = np.array([72057594037927935], dtype=np.uint64)
以及从b->;a
二进制表示法为全1,但元素数合并为一个64位整数 Numpy中的表示形式应相同,但元数据应更改
这听起来像是一个跨步技巧的工作,但我最好的猜测是:
np.lib.stride_tricks.as_strided(a, shape=(1,), strides=(8,8))
及
np.lib.stride_tricks.as_strided(b, shape=(8,), strides=(1,8))
仅获取ValueError:步幅长度和形状不匹配
这只需要是只读的,这样我就不会误以为我需要更改数据
如果要重新解释数组中的现有数据,则需要^{} 。这就是
.astype
和.view
之间的主要区别(即前者转换为新类型,保留值,而后者保持相同的内存并更改其解释方式):这个输出
注意
127
在其二进制模式中有一个前导零,因此它不是所有的,这就是为什么我们在b
中得到的值与您期望的不同:您似乎假设的是一组1位的
uint7
值无论如何,
.view
最好的部分是,除非您显式复制,否则将使用完全相同的内存块:当然,推论是突变
b
会影响a
:要控制尾端,您需要使用string-valued dtype specifications,即
a.view('<u8')
(小尾端)或a.view('>u8')
(大尾端)。我们可以用它重现您问题中的错误编号:相关问题 更多 >
编程相关推荐