为清晰起见编辑:
我有两个矩阵,p.valor 2x1000和p.clase 1x1000。 p.valor由跨越-6至6的随机数组成.p.clase按顺序包含200 1:s,200 2:s和600 3:s。我不想做的是
使用不同的颜色/提示为p.clase中确定的每个clase打印p.valor,如下面的figure所示。
我第一次写这篇文章,是为了找出p.valor中哪些位置代表哪个位置,哪个位于p.clase的1,2个相应位置
%identify the locations of all 1,2 respective 3 in p.clase
f1=find(p.clase==1);
f2=find(p.clase==2);
f3=find(p.clase==3);
%define vectors in p.valor representing the locations of 1,2,3 in p.clase
x1=p.valor(f1);
x2=p.valor(f2);
x3=p.valor(f3);
p.valor中有200个(1),因此,x1 =(1:200)。问题是每个数字(1)(以及分别为2和3)代表p.valor中的两个元素,因为p.valor有2行。因此即使p.clase和x1现在只有一行,我需要将元素包含在与f1中所有位置相同的列中。
所以我尝试过的不同选择还没有成功。例子:
plot(x1(:,1), x1(:,2),'ro')
hold on
plot(x2(:,1),x2(:,2),'k.')
hold on
plot(x3(:,1),x3(:,2),'b+')
和
y1=p.valor(201:400);
y2=p.valor(601:800);
y3=p.valor(1401:2000);
scatter(x1,y1,'k+')
hold on
scatter(x2,y1,'b.')
hold on
scatter(x3,y1,'ro')
和
y1=p.valor(201:400);
y2=p.valor(601:800);
y3=p.valor(1401:2000);
plot(x1,y1,'k+')
hold on
plot(x2,y2,'b.')
hold on
plot(x3,y3,'ro')
我的数据的轴线正确,但绘制的值与提供的正确数字不匹配(请参阅问题的顶部)。
因此,我的问题是:如何在我绘制的数字中包含p.valor第二行的值?
我希望这更清楚!
答案 0 :(得分:1)
可以使用以下语法访问两个行的值:
X=p.value(:,findX)
在这种情况下,得到的X矩阵将是具有2行和length(findX)
列的矩阵。
答案 1 :(得分:1)
M = magic(5)
M =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
M2 = M(1:2, :)
M2 =
17 24 1 8 15
23 5 7 14 16
Matlab使用列主要索引。所以要进入下一行,你实际上只需要添加1.在M2上添加2到索引就可以到达下一列,或者在M上添加5到索引
e.g。 M2(3)
是24
。要转到下一行,您只需添加一个M2(4)
返回5
。要转到下一列,请添加行数,以便M2(2 + 2)
为您1
。如果你像你建议的那样添加列数,你就会得到胡言乱语。
所以你的方法非常错误。 Freude的方法是100%正确的,使用下标索引要比线性索引更容易。但我只想解释为什么你在尝试的东西在Matlab中不起作用。 (除了X=p.value(findX findX+1000)
给你一个语法错误的事实,我认为你的意思是X=p.value([findX findX+1000])
)