【问题标题】:Numpy int64() function arguments?Numpy int64() 函数参数?
【发布时间】:2019-04-16 22:16:15
【问题描述】:

不知道为什么我找不到这个,但以下是什么意思?

hashvalue_byte_size = len(bytes(np.int64(42).data))

从左到右,我一般会说这描述了 np.int64(42).data 中的字节长度。

所以字节长度为8。

我认为 'np.int64()' 表示 (-9223372036854775808 到 9223372036854775807) 中的整数或 (0 到 18446744073709551615) 中的无符号整数

或者前缀 'np' 是否使 int64() 变成了别的东西?

最后,“42”代表什么? .data 是什么意思?

【问题讨论】:

  • 查看here了解内置整数和numpy整数之间的区别。

标签: python numpy hash byte int64


【解决方案1】:

从内到外解析这样的表达式是最有意义的:

In [189]: np.int64(42)
Out[189]: 42
In [190]: type(_)
Out[190]: numpy.int64
In [191]: np.int64(42).data
Out[191]: <memory at 0x7f7dc41a82e8>
In [192]: type(_)
Out[192]: memoryview
In [193]: np.int64(42)
Out[193]: 42
In [194]: type(_)
Out[194]: numpy.int64
In [195]: np.int64(42).data
Out[195]: <memory at 0x7f7dcc05cac8>
In [196]: type(_)
Out[196]: memoryview
In [197]: bytes(np.int64(42).data)
Out[197]: b'*\x00\x00\x00\x00\x00\x00\x00'
In [198]: len(_)
Out[198]: 8

查看一个包含一个或多个元素的 numpy 数组可能更有意义:

In [204]: np.array(42)
Out[204]: array(42)
In [205]: _.dtype
Out[205]: dtype('int64')
In [206]: np.array(42).data
Out[206]: <memory at 0x7f7dcc054780>
In [207]: bytes(np.array(42).data)
Out[207]: b'*\x00\x00\x00\x00\x00\x00\x00'
In [208]: bytes(np.array([42,43]).data)
Out[208]: b'*\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00'

数组对象具有属性和databuffer。该缓冲区存储数据,在本例中为每个元素的 8 字节整数。 bytes(...data) 只是生成该缓冲区的字节串表示。

tobytes 方法也一样:

In [209]: np.array([42,43]).tobytes()
Out[209]: b'*\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00'

【讨论】:

    【解决方案2】:

    当你尝试破译这样的表达时,你不应该从左到右,而是从内到外。如下所示,前两个语句定义了一个 numpy.int64 对象,其值为 42。这意味着 42 以 64 位整数的形式保存在内存中。下一个调用为您提供对象的内存地址。紧接着,我想你得到了用我不知道的语言表达的内存地址的内容。最后一个只是为您提供在内存地址分配的字节数。这里是 8,因为您为 64 位整数(1 字节 = 8 位)分配了空间。

    import numpy
    
    print(numpy.int64(42))
    # 42
    print(type(numpy.int64(42)))
    # <class 'numpy.int64'>
    print(numpy.int64(42).data)
    # <memory at 0x7f5e43221588>
    print(bytes(numpy.int64(42).data))
    # b'*\x00\x00\x00\x00\x00\x00\x00'
    print(len(bytes(numpy.int64(42).data)))
    # 8
    

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 2015-01-19
      • 2011-04-28
      • 2012-09-20
      • 2016-07-03
      • 2023-03-03
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多