Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab没有优化以下内容吗?_Matlab_Matrix_Sparse Matrix - Fatal编程技术网

Matlab没有优化以下内容吗?

Matlab没有优化以下内容吗?,matlab,matrix,sparse-matrix,Matlab,Matrix,Sparse Matrix,我有一个很长的向量1xr v,一个很长的向量w 1xs,还有一个矩阵a rxs,它是稀疏的,但维度非常大 我希望通过Matlab优化以下内容,这样我就不会在内存方面遇到问题: A./(v'*w) 但看起来Matlab实际上是在试图生成完整的v'*w矩阵,因为我遇到了内存不足的问题。有没有办法克服这个问题?注意,不需要计算所有v'*w,因为A的许多值都是0 编辑:如果这是可能的,一种方法是做AfindA。/v'*wfindA 但在这种情况下,如果不先计算矩阵v'*w的子集并将其放入变量中,就不

我有一个很长的向量1xr v,一个很长的向量w 1xs,还有一个矩阵a rxs,它是稀疏的,但维度非常大

我希望通过Matlab优化以下内容,这样我就不会在内存方面遇到问题:

 A./(v'*w)
但看起来Matlab实际上是在试图生成完整的v'*w矩阵,因为我遇到了内存不足的问题。有没有办法克服这个问题?注意,不需要计算所有v'*w,因为A的许多值都是0

编辑:如果这是可能的,一种方法是做AfindA。/v'*wfindA

但在这种情况下,如果不先计算矩阵v'*w的子集并将其放入变量中,就不能选择它的子集

您可以使用bsxfun。这将给出与A./v'*w相同的结果,而不生成矩阵v'*w:

另一种可能性:如果您只需要非零值,请使用:

[ii jj Anz] = find(A);
Anz./v(ii)'./w(jj).'
这将给出与AfindA相对应的列向量。/v'*wfindA,同样不生成v'*w。如果需要稀疏矩阵A./v'*w,而不是其非零值的列向量,请使用sparseii、jj、Anz./vii./wjj


您可能想改为对非零稀疏矩阵元素SMMM使用-Apply函数。。。spfun可能是一个很好的线索,但我不确定在这种情况下如何使用它。首先,被求值函数不知道它所应用的矩阵单元的索引。另一个rdivide答案!很不错的。但是,由于内存问题,可能需要非零解决方案,但您已经重新排列了术语,以解决我看到的问题。@chappjc是的,自从我了解了bsxfun之后,我倾向于将其应用于所有问题:-我不明白您关于重新排列术语SKLOOP的观点,因为v'*w已分组,但您可以按顺序处理它们。这正是我第一眼没能理解的问题的本质。因此,答案实际上与我刚刚尝试的一个测试用例中5.8208e-11的引用不同。。。机器精度误差不断累积,但仍然很小。
[ii jj Anz] = find(A);
Anz./v(ii)'./w(jj).'