将值传递给 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) 确定 G 中有多少元素,nnz(G) 确定 G 中有多少 非零 值。减去这两个会给你零元素的总数。
  2. 你所做的是首先声明 X 是稀疏的...然后当你在最后一行对 X 进行最终赋值时,它将矩阵重新转换为 double。因此,第一个声明完全是多余的。

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

你别无选择,只能使用中间变量。但是,如果你想让它更有效率,你甚至不需要使用 ind2sub。直接用find就可以了:

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