我需要乘以两个矩阵,其中一个大小为36000x1乘以其转置。 我收到以下错误:
其中一个论点'值超出范围(总矩阵大小不适合setSize中的" size_t"类型)。
我该怎么办?我使用的是64位计算机。
答案 0 :(得分:0)
矩阵A:36000x1
矩阵B:1x36000
因此矩阵C = AxB:36000x36000
然后C有1296000000个元素,其成本约为1.2G * sizeof(元素类型)。
答案 1 :(得分:0)
由于矩阵mA Nx1和矩阵mB 1xN的乘法是微不足道的:Prod [i1] [i2] == mA [i1] * mB [i2],您不必存储结果,只需存储2个矩阵(如果总是完成换位,则返回1)并根据索引返回结果。
未经测试的代码:
struct ProdmNx1Transp
{
const std::vector<int>& m; // reference, so the matrix must outlive the product.
explicit ProdmNx1Transp(const std::vector<int>& in_m) : m(in_m) { }
int operator(int i1, int i2) const { /* first check ranges */ return m[i1] * m[i2]; }
};
std::vector<int> m1 = { 1, 2, 3, 4 };
ProdmNx1Transp prod(m1);
std::cout << prod(0, 2) << ", " << prod(3, 1) << '\n';