如何通过变量数组来创建常量向量?

时间:2016-07-06 17:30:54

标签: matlab

我有一个向量(" d")我想将它的内容放到矩阵中(" dis"),我有问题需要创建&# 34; DIS"矩阵。 " DIS"应该像

dis=[
    1 2 3 4 5 6 7 8 9 10 11 12
    0 1 2 3 4 5 6 7 8 9 10 11
    0 0 1 2 3 4 5 6 7 8 9 10
    0 0 0 1 2 3 4 5 6 7 8 9
    0 0 0 0 1 2 3 4 5 6 7 8 
    0 0 0 0 0 1 2 3 4 5 6 7
    0 0 0 0 0 0 1 2 3 4 5 6
    0 0 0 0 0 0 0 1 2 3 4 5
    0 0 0 0 0 0 0 0 1 2 3 4 
    0 0 0 0 0 0 0 0 0 1 2 3 
    0 0 0 0 0 0 0 0 0 0 1 2 
    0 0 0 0 0 0 0 0 0 0 0 1];

n=[0,0;1,0;2,0;3,0;4,0;5,0;6,0;7,0;8,0;9,0;10,0;11,0;12,0];
d=pdist(n,'euclidean');
l=length(n)-1;
dis=[];
for k=1:length(n)-1
    dis=[dis;d((k-1)*l-(k*((k-1)/2))+k):d(k*l-((k+1)*k/2)+k)];

end

2 个答案:

答案 0 :(得分:0)

使用上面的squareform表单@beaker评论,您可以写:

dis = triu(squareform(d));
dis = dis(1:length(dis)-1,2:length(dis));

这是否解决了这个问题?

答案 1 :(得分:0)

问题是你没有用零填充dis。

您可以替换

dis=[];
for k=1:length(n)-1
    dis=[dis;d((k-1)*l-(k*((k-1)/2))+k):d(k*l-((k+1)*k/2)+k)];
end

dis = zeros(l);
for k=1:l
    dis(k,k:end) = d((k-1)*l-(k*((k-1)/2))+k):d(k*l-((k+1)*k/2)+k)
end