将值传递给 MATLAB 中的稀疏矩阵
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];
对你来说可能听起来太简单了,但我需要一些帮助来重新完成所有以下操作,而不是定义冗余变量,即 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];