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

时间:2015-05-07 02:53:05

标签: matlab sparse-matrix

听起来可能听起来太简单但我需要一些帮助才能在一次拍摄中完成所有操作而不是定义冗余变量,即 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 的情况下实现这一目标?

1 个答案:

答案 0 :(得分:1)

您的代码有几条评论:

  1. numel(find(G == 0))可能是确定矩阵中有多少条目为零的最差方法之一。我个人会numel(G) - nnz(G)numel(G)确定G中的元素数量,nnz(G)确定G中有多少非零值。减去这两者将为您提供零元素的总数。
  2. 您正在做的是首先声明X稀疏...然后当您在最后一行中对X进行最终分配时,它会将矩阵重新转换为{{ 1}}。因此,第一个陈述完全是多余的。
  3. 如果我了解您在做什么,您希望在double中找到零的行和列位置,并将它们放入G矩阵中。目前有MATLAB可用,没有中间变量就无法做到这一点。如果要捕获行和列位置,您通常使用的函数(N x 2find等)需要中间变量。使用一个输出变量将仅为您提供列位置。

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

    find