gpt4 book ai didi

matlab - 稀疏矩阵的非零元素

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:33 25 4
gpt4 key购买 nike

假设我有一个带有很多零的大矩阵 X,所以我当然会使其稀疏以节省内存和 CPU。之后我做了一些事情,在某些时候我想要非零元素。我的代码看起来像这样:

 ind = M ~= 0; % Whereby M is the sparse Matrix

然而,这对我来说看起来相当愚蠢,因为稀疏矩阵的结构应该允许直接提取信息。

澄清一下:我不是在寻找可行的解决方案,而是想避免重复做同样的事情。稀疏矩阵应该预定义已经知道它的非零值,因此不需要搜索它。

你的魔法师_

最佳答案

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

直接方式 显然是最快 方法,但是我对稀疏及其 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 - 稀疏矩阵的非零元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17740226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com