1

为清楚起见进行编辑:

我有两个矩阵,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 中的哪些位置代表 1,2 相应的 3 在 p.clase 中的位置

 %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 第二行的 tha 值?

我希望这更清楚!

4

2 回答 2

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。将 2 添加到 M2 上的索引可以让您进入下一列,或者将 5 添加到 M 上的索引

例如M2(3)24。要进入下一行,您只需添加一个即M2(4)返回5。要进入下一列,请添加行数,这样M2(2 + 2)就可以了1。如果您像您建议的那样添加列数,您只会得到胡言乱语。

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

于 2013-09-20T12:07:05.477 回答
1

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

X=p.value(:,findX)

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

于 2013-09-20T11:55:56.140 回答