Matlab生成用于访问多行的矩阵索引

时间:2013-09-20 11:36:33

标签: matlab matrix matrix-indexing

为清晰起见编辑:

我有两个矩阵,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第二行的值?

我希望这更清楚!

2 个答案:

答案 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])