是本征矩阵大小两倍的 Numpy 数据大小吗?

Numpy data size twice of the Eigen Matrix size is that the case?

我正在生成 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 dtype 是 float_,但令人困惑的是,这是一个双 [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) 并比较。

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

有关所有 numpy 数组数据类型的信息,请参阅 https://numpy.org/doc/stable/user/basics.types.html