我试图在Mathematica中解决一个相当大的线性规划问题,但由于某种原因,瓶颈是设置线性约束的数组.
我初始化矩阵的代码如下所示:
AbsoluteTiming[S = SparseArray[{{i_, 1} -> iaa[[i]],
{i_, j_} /; Divisible[a[[j]], aa[[i]]] -> 1.}, {2*n, n}]]
Run Code Online (Sandbox Code Playgroud)
这里n是4455,iaa是实数列表,a,aa是整数列表.我得到的这条线的输出是
{2652.014773,SparseArray[<111742>,{8910,4455}]}
Run Code Online (Sandbox Code Playgroud)
换句话说,初始化此矩阵需要45分钟,即使它只有111,742个非零项.为了比较,实际上解决线性程序只需要17秒.是什么赋予了?
编辑:此外,任何人都可以解释为什么这会占用如此多的内存,因为它运行?因为在用户时间,这个计算花费的时间不到十分钟......大部分计算时间都花费在内存中进行分页.
Mathematica出于某种原因将这个矩阵存储为非稀疏矩阵,而它正在构建它吗?因为那真的很蠢.