考虑以下数据集
Obs y x z
1 3 10 1
2 0 12-1
3 4 9 3
4 2 15 0
y是因变量,其他是解释变量
我想根据一些条件给出总共4个观测值的新坐标,例如,
如果y在[0,3]中给那个y 1, 或者如果y在[3,6]中,则给那个y加2。
同样地, 如果x在[9,12]中,给那个x加1, 或者如果x在[12,16]中,给那个x赋予2,
为z做类似的事。
结果,
Obs y x z coordinate
1 3 10 1 (1,1,1)
2 0 12 1 (1,1,1)
3 4 9 3 (2,1,2)
4 2 15 0 (1,2,1)
我需要这些新坐标作为4次观测的矢量。
我或许可以通过“循环”来做到这一点。命令,但太耗时了。 所以我需要在没有“循环”的情况下做到这一点。但是有一些与矢量相关的命令。
有人知道怎么做吗?
答案 0 :(得分:0)
您可以使用逻辑索引轻松完成此操作,事实上,这在这里得到了很好的回答:Change elements of matrix based on condition
n=4;
coordinate = zeros(n,3);
%// y
coordinate(:,1) = (y > 3) + 1
%// x
coordinate(:,2) = (x > 12) + 1
等...
答案 1 :(得分:0)
如果基于逻辑表达式每个坐标只有两个值,Dan's answer会很好用,如果你有更复杂的逻辑要求,那么我认为你想要类似下面的东西(很容易就是这样)扩展到涵盖更多案例):
y = [ 3 0 4 2 ]';
x = [ 10 12 9 15 ]';
z = [ 1 1 3 0 ]';
coordinate = zeros(length(x), 3);
coordinate(y >= 0 & y < 3, 1) = 1;
coordinate(y >= 3 & y < 6, 1) = 2;
coordinate(x >= 9 & x < 12, 2) = 1;
coordinate(x >= 12 & x < 16, 2) = 2;
coordinate(z >= 0 & z < 3, 3) = 1;
coordinate(z >= 3 & z < 6, 3) = 2;
coordinate
结果
coordinate =
2 1 1
1 2 1
2 1 2
1 2 1
您可以在其中读取每一行,例如coordinate(1, :)
以获取第一组坐标。
这样做的另一个好处是,您可以看到没有任何规则匹配,因为coordinate
矩阵中的元素将为0
。您也可以使用nan
代替zeros
来创建coordinate
矩阵。