gpt4 book ai didi

matlab - 给定非零元素的位置,如何在 MATLAB 中创建稀疏矩阵

转载 作者:行者123 更新时间:2023-12-02 05:29:01 26 4
gpt4 key购买 nike

我需要根据以下要求在 MATLAB 中创建矩阵。给定一个向量 v,例如 [1,2,2,1,3,5,1],我需要形成一个矩阵:

[1 0 0 1 0 0 1;
0 1 1 0 0 0 0;
0 0 0 0 1 0 0;
0 0 0 0 0 0 0;
0 0 0 0 0 1 0]

即矩阵的 i 列在 v[i] 行仅包含一个非零元素(单个 1)。我怎样才能避免循环并以有效的方式执行此操作?

最佳答案

其他人指出循环在这里很好。我会指出稀疏要好得多。你的矩阵是稀疏的,非常稀疏,所以使用稀疏的能力来解决这个问题,并在矩阵很大的情况下节省大量的存储空间。

N = 3000;
v = ceil(rand(1,3000)*3000);

tic
A = zeros(N,N);
for i = 1:N
A(v(i),i) = 1;
end
toc
Elapsed time is 0.069082 seconds.

tic
B = sparse(v,1:N,1,N,N);
toc
Elapsed time is 0.001308 seconds.

所以如果矩阵很大,时间上会有很大的差异。

空间如何?

whos A B
Name Size Bytes Class Attributes

A 3000x3000 72000000 double
B 3000x3000 72008 double sparse

矩阵在其他方面是相同的。

sum(sum(abs(A - B)))
ans =
0

稀疏矩阵占用的空间非常小,您可以像使用任何其他矩阵一样使用它。

使用 MATLAB 的功能。

关于matlab - 给定非零元素的位置,如何在 MATLAB 中创建稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658682/

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