Matlab通用矩阵索引实现多行存取

Matlab通用矩阵索引实现多行存取,matlab,matrix,matrix-indexing,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中确定的每个类别,使用不同的颜色/提示打印p.valor,如下所示 我首先写这篇文章是为了找出p.valor中的哪个位置代表p.clase中的1,2和3 %identify the locations of all 1,2 respective 3 in

为清晰起见,请编辑:

我有两个矩阵,p.valor 2x1000和p.clase 1x1000。p、 valor由-6到6的随机数组成。p、 clase按顺序包含200 1:s、200 2:s和600 3:s。我不想做的是

对于p.clase中确定的每个类别,使用不同的颜色/提示打印p.valor,如下所示

我首先写这篇文章是为了找出p.valor中的哪个位置代表p.clase中的1,2和3

 %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(1)(和,分别为2和3)代表p.valor中的两个元素,因为p.valor有两行。因此,即使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+')

我的图的轴是正确的,但绘制的值与提供的正确图不匹配(请参见问题的顶部)

因此,我的问题是:如何将p.valor中第二行的tha值包含在绘制的图形中


我希望这更清楚

可以使用以下语法同时访问两行中的值:

X=p.value(:,findX)
在这种情况下,生成的X矩阵将是一个具有2行和
length(findX)
列的矩阵

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
。如果你像你建议的那样增加列数,你就会变得胡言乱语


所以你的方法是非常错误的。弗洛伊德的方法是100%正确的,使用下标索引比线性索引容易得多。但我只是想解释一下为什么你尝试的东西在Matlab中不起作用。(除了
X=p.value(findX findX+1000)
给你一个语法错误之外,我想你的意思是
X=p.value([findX findX+1000])

我在问题中添加了我的代码,这样你就可以看到我是如何尝试应用你所说的。但是,当我这样做时,我得到一个具有所有正确y值的图形,但对于x值只有1和2。我的数字应该看起来像@MatlabNoob如果你有统计工具箱,你应该查看gscatter函数谢谢!我也尝试使用列主索引,通过编写
x1=p.valor(f1)
y1=p.valor(f1+1)
绘图(x1,y1,'r.)
但我现在得到的绘图有一个x轴,范围从0到600,即列数),而我的值仅从-6到6。我该怎么做才能清楚地知道是特定位置的数字值,而不是我想要绘制的位置本身?@MatlabNoob,对不起,我没有跟着你。是的,对不起,我没有跟着我自己@Dan。我将更新我的问题,以便更容易回答understand@MatlabNoob好的,我想这就是你想要的:
plot(x1(:,1),x1(:,2),'r.)
Hmm,给我一个只有三个符号的数字。为了更清晰,我现在进行了编辑。再次感谢你@Dan
X=p.value(:,findX)
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