[英]Passing values to a sparse matrix in MATLAB
听起来可能对您来说太简单了,但是我需要一些帮助进行重做以一次完成所有操作,而不是定义冗余变量, 例如 tmp_x , tmp_y :
X= sparse(numel(find(G==0)),2);
[tmp_x, temp_y] = ind2sub(size(G), find(G == 0));
X(:)=[tmp_x, tmp_y];
(更多信息: G是一个稀疏矩阵)
我试过了:
X(:)=ind2sub(size(G), find(G == 0));
但这引发了错误。 如何在不定义tmp_x和tmp_y的情况下实现此目标 ?
您的代码有几点注释:
numel(find(G == 0))
可能是确定矩阵中有多少个零条目的最差方法之一。 我个人会做numel(G) - nnz(G)
。 numel(G)
确定的许多元素是如何在G
和nnz(G)
确定许多非零值如何在G
。 将这两个元素相减将得出的元素总数为零。 X
为稀疏...然后在最后一行中将最终赋值给X
,它将矩阵重新转换为double
。 因此,第一条陈述是完全多余的。 如果我了解您在做什么,则想在G
找到零的行和列位置,并将它们放入N x 2
矩阵中。 当前使用MATLAB所提供的功能,如果没有中间变量就无法做到这一点。 如果要捕获行和列的位置,通常需要使用的函数( find
, ind2sub
等)需要中间变量。 使用一个输出变量将只为您提供列位置。
您别无选择,只能使用中间变量。 但是,如果要提高效率,甚至不需要使用ind2sub
。 只需直接使用find
:
[I,J] = find(~G);
X = [I,J];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.