是np.ndarray.tobytes()确定性操作?

normanius:

我遇到的一个奇怪的行为np.ndarray.tobytes(),这让我怀疑它是针对阵列的工作确定性,至少dtype=object

import numpy as np
print(np.array([1,[2]]).dtype)
# => object
print(np.array([1,[2]]).tobytes())
# => b'0h\xa3\t\x01\x00\x00\x00H{!-\x01\x00\x00\x00'
print(np.array([1,[2]]).tobytes())
# => b'0h\xa3\t\x01\x00\x00\x00\x88\x9d)-\x01\x00\x00\x00'

在示例代码,(混合蟒对象的列表[1, [2]])首先被转换为一个numpy的阵列,然后转化到用一个字节序列tobytes()

为什么生成的字节表示差异,同一数据的重复实例?文件只是说,它转换的ndarray原始蟒蛇字节,但它不涉及任何限制。到目前为止,我发现这只是为了dtype=object数字数组总是产生相同的字节序列:

np.random.seed(42); print(np.random.rand(3).tobytes())
# b'\xecQ_\x1ew\xf8\xd7?T\xd6\[email protected]\xee?Qg\x1e\x8f~l\xe7?'
np.random.seed(42); print(np.random.rand(3).tobytes())
# b'\xecQ_\x1ew\xf8\xd7?T\xd6\[email protected]\xee?Qg\x1e\x8f~l\xe7?'

我错过了约Python的/ numpy的内存架构的Elementar公司的事吗?我在Mac上numpy的版本1.17.2测试。


背景:试图当我遇到这个问题计算散列的任意数据结构。我希望我可以依靠的基本序列化功能tobytes(),但是这似乎是一个错误的前提。我知道这pickle是在python序列化的标准,但因为我不要求便携性和我的数据结构只包含数字,我第一次寻求与numpy的帮助。

疯狂的物理学家:

D型的阵列object存储指向它所包含的对象。在CPython的,这对应id创建一个新的列表时,它都会将新的内存地址进行分配。然而,小整数被拘留,所以1每次都会引用相同的整数对象。

你可以看到这是怎样工作通过检查一些样本对象的ID:

>>> x = np.array([1, [2]])
>>> x.tobytes()
b'\x90\x91\x04a\xfb\x7f\x00\x00\xc8[J\xaa+\x02\x00\x00'
>>> id(x[0])
140717641208208
>>> id(1)                             # Small integers are interned
140717641208208
>>> id(x[0]).to_bytes(8, 'little')    # Checks out as the first 8 bytes
b'\x90\x91\x04a\xfb\x7f\x00\x00'
>>> id(x[1]).to_bytes(8, 'little')    # Checks out as the last 8 bytes
b'\xc8[J\xaa+\x02\x00\x00'

正如你所看到的,这是很确定的,但是序列化是基本没用的,你的信息。的操作是用于数字数组作为对象数组相同的:它返回一个视图或底层缓冲器的复制。缓冲区的内容是什么,是你扔了。

既然你提到你是计算哈希值,请记住,有一个原因,蟒蛇名单unhashable。你可以是在同一时间相同和不同的另一个列表。使用IDS的一般不是一个有效的哈希一个好主意。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Python

如何np.ndarray.tobytes为D型“对象”()的工作?

来自分类Dev

NP-非确定性多项式时间

来自分类Linux

malloc是确定性的吗?

来自分类Java

AES确定性加密

来自分类Dev

不确定性

来自分类Java

不确定性的方法有序的流处理单元的状态地图操作?

来自分类Dev

Python对函数参数和操作数求值的顺序是确定性的吗(+在何处记载)?

来自分类Dev

JIT是否确定性地无法更改操作和内联函数?

来自分类Java

Java的8流的确定性

来自分类Dev

结构打包是确定性的吗?

来自分类Linux

内核构建缓存/非确定性

来自分类Java

确定性是什么意思?

来自分类Dev

stof,strtof是确定性的吗?

来自分类Java

Java不是确定性的吗?

来自分类Dev

确定性Miller-Rabin实施

来自分类Dev

抓狂,要求确定性吗?

来自分类Dev

使序言谓语具有确定性

来自分类Dev

从polyfit查找不确定性

来自分类Java

从SecureRandom获取确定性值?

来自分类Dev

确保谓词确定性地成功

来自分类Dev

不确定性与熵的传播

来自分类Dev

Haskell类型检查和确定性

来自分类Dev

如何创建确定性的Jackson ObjectMapper?

来自分类Dev

scipy linalg确定性/不确定性代码

来自分类Dev

确定性python脚本以非确定性方式运行

来自分类Java

Java中的确定性RSA加密

来自分类Dev

为什么的std ::哈希不保证确定性?

来自分类Java

就像过滤器+的FindFirst anyMatch确定性?

来自分类Dev

Prolog:如何判断谓词是否是确定性的

TOP 榜单

  1. 1

    来自Microsoft Office加载项taskpane.js的MySQL驱动程序模块的空引用

  2. 2

    HikariPool-1-连接不可用,对于极小的负载服务器,请求在30000ms之后超时

  3. 3

    OpenJDK的和AdoptOpenJDK的区别

  4. 4

    任务':app:minifyReleaseWithR8'.java.lang.NullPointerException的执行失败(无错误消息)

  5. 5

    java.lang.NoClassDefFoundError:无法初始化类org.bytedeco.javacpp.avutil

  6. 6

    是什么在Android的consumer-rules.pro和proguard-rules.pro之间的区别?

  7. 7

    如何优化在Java中这种方法吗?我得到的时间超限

  8. 8

    错误TS1086:一个存取器不能在角9的环境上下文被声明

  9. 9

    java.lang.NoSuchFieldError的:ACCEPT_CASE_INSENSITIVE_VALUES

  10. 10

    如何在exoplayer中播放本地媒体文件的硬编码内容uri

  11. 11

    Keras提前停止回调错误,val_loss指标不可用

  12. 12

    在JavaScript中删除多个对象键值

  13. 13

    请问Spring事务管理工作与Spring WebFlux?

  14. 14

    未定义:grpc.SupportPackageIsVersion7 grpc.ServiceRegistrar

  15. 15

    如何在Python中将字典拆分成多个字典的列表,所有字典的大小均为N

  16. 16

    在IntelliJ IDEA中并行运行测试用例

  17. 17

    Java的无法解析日期的SimpleDateFormat

  18. 18

    tensorflow:仅在可用val_acc的情况下可以保存最佳模型,跳过

  19. 19

    无法装载动态库“libnvinfer.so.6”

  20. 20

    Java反射错误Java.lang.NoSuchMethodException,但是方法存在

  21. 21

    我在android studio中创建了clicker应用。但是,运行时,应用程序在调用“ incrementCount()”后崩溃。为什么?

热门标签

归档