Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 稀疏矩阵的非零元素_Matlab_Sparse Matrix - Fatal编程技术网

Matlab 稀疏矩阵的非零元素

Matlab 稀疏矩阵的非零元素,matlab,sparse-matrix,Matlab,Sparse Matrix,假设我有一个很大的矩阵X,其中有很多零,所以为了节省内存和CPU,我当然会将其稀疏化。在那之后,我做了一些事情,在某一点上,我想得到非零元素。我的代码如下所示: ind = M ~= 0; % Whereby M is the sparse Matrix 然而,这在我看来相当愚蠢,因为稀疏矩阵的结构应该允许直接提取信息 澄清一下:我不寻求有效的解决方案,而是希望避免重复同样的事情。稀疏矩阵应该已经知道它的非零值,所以不需要搜索它 你的杂志我不是百分之百确定你在找什么,但也许找到(m)更适合你

假设我有一个很大的矩阵X,其中有很多零,所以为了节省内存和CPU,我当然会将其稀疏化。在那之后,我做了一些事情,在某一点上,我想得到非零元素。我的代码如下所示:

 ind = M ~= 0; % Whereby M is the sparse Matrix
然而,这在我看来相当愚蠢,因为稀疏矩阵的结构应该允许直接提取信息

澄清一下:我不寻求有效的解决方案,而是希望避免重复同样的事情。稀疏矩阵应该已经知道它的非零值,所以不需要搜索它


你的杂志我不是百分之百确定你在找什么,但也许找到(m)更适合你


您可以通过
M(r,c)
获得
M
的值,但最好的方法肯定取决于您接下来打算如何处理数据。

从稀疏矩阵中检索非零元素的直接方法是调用

直接的方法显然是最快的方法,但是我对稀疏及其
full()
对手进行了一些逻辑索引测试,前者的索引速度更快(结果取决于稀疏模式和矩阵的维数)

100次迭代的次数总和为:

nonzeros:   0.02657 seconds
sparse idx: 0.52946 seconds
full idx:   2.27051 seconds
测试套件:

N = 100;
t = zeros(N,3);
for ii = 1:N
    s = sprand(10000,1000,0.01);
    r = full(s);

    % Direct call nonzeros
    tic
    nonzeros(s);
    t(ii,1) = toc;

    % Indexing sparse
    tic
    full(s(s ~= 0));
    t(ii,2) = toc;

    % Indexing full
    tic
    r(r~=0);
    t(ii,3) = toc;
end

sum(t)
功能由MATLAB推荐:

[row,col]=find(X,…)返回矩阵X中非零项的行和列索引。此语法在处理稀疏矩阵时特别有用。

虽然之前已经提出过,但我认为这是一个重要的补充:

[r,c,v] = find(M);

不仅给出了指数r,c,还给出了非零值v。使用“非零”命令似乎要快一点,但在处理稀疏矩阵时,“查找”通常非常有用,因为[r,c,v]向量描述完整矩阵(矩阵维度除外)。

完整和稀疏的代码或注释似乎要切换。@DennisJaheruddin它们不是
r
已经满了,我需要将
s(…)
转换为full以获得最终结果,这一步属于计时。是的,这正是我想要的(我的意思是非零)。对我来说,做同样的操作(索引两次)似乎很愚蠢。查找检索已由稀疏对象存储的子向量<代码>非零()。