【问题标题】:Numpy data size twice of the Eigen Matrix size is that the case?Numpy 数据大小是 Eigen Matrix 大小的两倍吗?
【发布时间】:2021-07-11 08:14:04
【问题描述】:

我正在生成 numpy 数组:

p_desct = np.random.uniform(-1, 0.4, [5000000, 512])

内存大小差不多~20G

特征矩阵 (C++) 中的相同数据:

    Eigen::MatrixXf x_im = Eigen::MatrixXf::Random(5000000,512);

内存大小~9,6G

numpy 数组是否会使同一矩阵的内存使用量翻倍?

还是我在这里遗漏了什么?

【问题讨论】:

  • 看起来 numpy 默认使用双精度。将此与 Eigen::MatrixXd 进行比较,而不是 Eigen::MatrixXf
  • 你的 numpy 数组的 dtype 是什么? (p_desct.dtype)

标签: python c++ numpy eigen


【解决方案1】:

Numpy 数组默认使用 64 位浮点数(通常称为“双精度”),而 C++ 数组使用 32 位浮点数。这意味着您的 numpy 数组占用的内存是 C++ 数组的两倍。如果您希望使用 32 位浮点数,请指定 dtype = np.float32

另请参阅 https://numpy.org/doc/stable/user/basics.types.html 了解所有 numpy 数组数据类型

【讨论】:

    【解决方案2】:

    默认的 numpy dtype 是 float_,但令人困惑的是,这是一个 double [https://numpy.org/doc/stable/reference/arrays.scalars.html#numpy.float_]。

    Eigen 数据类型中的 f 后缀表示 32 位传统浮点数,因此是 numpy 使用的 64 位双精度的一半。

    试试

    np.random.uniform(-1, 0.4, [5000000, 512], dtype=np.float32) 并进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 2014-03-19
      • 2019-11-24
      相关资源
      最近更新 更多