【发布时间】:2016-02-28 09:28:15
【问题描述】:
我阅读了有关在 MATLAB 中正确使用内存的有趣文章。这是:Link at official website 在这里我看到了例子:
如果您的数据包含许多零,请考虑使用稀疏数组,这 仅存储非零元素。下面的例子比较空间 存储主要为零的数组所需的:
A = diag(1e3,1e3); % Full matrix with ones on the diagonal
As = sparse(A) % Sparse matrix with only nonzero elements
我尝试在我的代码中实现它并找到有趣的时刻:
A = diag(1e3,1e3) 不会创建对角线上的矩阵!它创建只有一个非零元素的零矩阵:
clear A
A = diag(1e3,1e3);
find(A);
ans =
1001001
A(1001001)
ans =
1000
好的。我在帮助中阅读了diag 函数并看到了这个:
D = diag(v) 返回一个对角方阵,其中的元素为 主对角线上的向量 v。
好的!因此,如果 v 包含 1 个元素,它真的不会创建对角矩阵!帮助是错误的吗?
但。还有一个问题:为什么会这样?
diag(5,5)
ans =
0 0 0 0 0 5
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
我希望得到矩阵 5x5,5 值为 (1,1) 或 (5,5)。为什么它会创建 6x6 矩阵以及为什么 5 是 (1,6) 元素?
【问题讨论】: