我有571个矩阵(625 x625),所有的矩阵都是对称的,名字分别是z1,z2,...z571;我需要把每个矩阵的非重复元素放在一个行向量中。例如,通过把z1的非重复元素放在一个行向量中,我得到行向量c1。从z2得到c2,...这是我从z1得到c1的代码:
c1=zeros(1,195625);
z1=zeros(625);
for i=1:625
for j=1:625
if (i<=j)
z1(i,j)=c1(1,n);
n=n+1;
end
end
end
第一个问题是跑的时间太长了。有没有办法提高速度?第二个问题:如果我想从z1得到c1,从z2得到c2,...从z571得到c571,然后用c1,c2,...,c571的行构成一个矩阵X,我该怎么做?谢谢你的帮助
1条答案
按热度按时间yfjy0ee71#
通过预先计算需要哪些元素,然后使用逻辑索引一次获取所有元素,可以使代码运行得更快:
然后将每一个放入您的行中:
如果按照Luis的评论将矩阵存储在一个三维数组中,仍然可以一次性执行所有操作,并且可以免费获得X数组:
注意:使用
tril
而不是triu
是因为MATLAB以列为主的顺序从逻辑索引返回元素,而原始循环以行为主的顺序遍历矩阵。