繁体   English   中英

在MATLAB中将值传递给稀疏矩阵

[英]Passing values to a sparse matrix in MATLAB

听起来可能对您来说太简单了,但是我需要一些帮助进行重做以一次完成所有操作,而不是定义冗余变量, 例如 tmp_xtmp_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_xtmp_y的情况下实现此目标

您的代码有几点注释:

  1. numel(find(G == 0))可能是确定矩阵中有多少个零条目的最差方法之一。 我个人会做numel(G) - nnz(G) numel(G)确定的许多元素是如何在Gnnz(G)确定许多非零值如何在G 将这两个元素相减将得出的元素总数为零。
  2. 您要做的是先声明X为稀疏...然后在最后一行中将最终赋值给X ,它将矩阵重新转换为double 因此,第一条陈述是完全多余的。

如果我了解您在做什么,则想在G找到零的行和列位置,并将它们放入N x 2矩阵中。 当前使用MATLAB所提供的功能,如果没有中间变量就无法做到这一点。 如果要捕获行和列的位置,通常需要使用的函数( findind2sub等)需要中间变量。 使用一个输出变量将只为您提供列位置。

您别无选择,只能使用中间变量。 但是,如果要提高效率,甚至不需要使用ind2sub 只需直接使用find

[I,J] = find(~G);
X = [I,J];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM