代码之家  ›  专栏  ›  技术社区  ›  R71

python和numpy中整数和数组的大小是多少

  •  2
  • R71  · 技术社区  · 6 年前

    我正在尝试确定Python中不同数据类型的大小,并编写以下代码。每行的输出都显示为它们旁边的注释。

    import numpy as np
    import sys
    print(sys.version) # 3.6.7
    print(np.version.version) # 1.15.4
    
    i = 2
    print(type(i)) # <class 'int'>
    print(sys.getsizeof(i)) # 28
    
    j = np.int64(3)
    print(type(j)) # <class 'numpy.int64'>
    print(sys.getsizeof(j)) # 32
    
    a = np.array([[1,2],[3,4],[5,6]])
    print(type(a)) # <class 'numpy.ndarray'>
    print(sys.getsizeof(a))   # 160
    print(type(a[0][0])) # <class 'numpy.int64'>
    print(sys.getsizeof(a[0][0])) # 32
    
    a = np.array([[1,2],[3,4],[5,6],[7,8]])
    print(sys.getsizeof(a))   # 176
    

    从上面的输出来看,一个6元素数组的大小是160,一个8元素数组的大小是176,所以我可以得出这样的结论:数组中每个元素的大小是8字节,数组头(常量)的大小是112字节?每个元素的大小是常量还是取决于其值(大还是小)?

    另外,当我打印[0][0]尺寸时,为什么我得到32而不是8?python和numpy整数和数组背后的数学究竟是什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ali Hallaji    6 年前

    实际上“ 西格西泽夫 “不是确定numpy大小的合适函数。它只适用于内置的Python对象。

    返回以字节为单位的对象大小。对象可以是任何类型的对象。所有内置对象都将返回正确的结果,但对于第三方扩展来说,这并不一定是正确的,因为它是特定于实现的。

    getsizeof()调用对象_s 西泽 方法并添加一个额外的垃圾收集器开销(如果对象由垃圾收集器管理)。

    为了 尼达尔射线 使用 字节数 哪个是 大小 * 项目尺寸

    a = np.array([[3,4],[8,0],[9,8],[7,0]])
    a.size # 8
    a.itemsize # 8
    a.nbytes # 64
    a = np.array([[3,4],[8,0],[9,8],[7,0]],dtype=np.int32)
    a.size # 8
    a.itemsize # 4
    a.nbytes # 32