是本征矩阵大小两倍的 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
我正在生成 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