我有这个矩阵:
mpc.bus = [100 1 170 100 0 0 1 1 0 230 1 1.1 0.9;
110 3 50 30 0 0 1 1 0 230 1 1.1 0.9;
120 2 80 45 0 0 1 1 0 230 1 1.1 0.9;
130 1 200 110 0 0 1 1 0 230 1 1.1 0.9;
140 1 30 8 0 0 1 1 0 230 1 1.1 0.9]
我想创建一个遵循以下规则的子矩阵:
如果第二列的值等于3或2,则新的矩阵(称为MatrixPVREF
)将接收mpc.bus
的第1,第2,第3和第4列。
这是我想要获得的结果:
MatrixPVREF = [110 3 50 30;
120 2 80 45]
答案 0 :(得分:2)
mpc.bus = [100 1 170 100 0 0 1 1 0 230 1 1.1 0.9;
110 3 50 30 0 0 1 1 0 230 1 1.1 0.9;
120 2 80 45 0 0 1 1 0 230 1 1.1 0.9;
130 1 200 110 0 0 1 1 0 230 1 1.1 0.9;
140 1 30 8 0 0 1 1 0 230 1 1.1 0.9];
tmp2 = mpc.bus(mpc.bus(:,2)==2,:);
tmp3 = mpc.bus(mpc.bus(:,2)==3,:);
MatrixPVREF = [tmp3(1:4); tmp2(1:4)]
MatrixPVREF =
110 3 50 30
120 2 80 45
更短的:
MatrixPVREF = mpc.bus(mpc.bus(:,2)==2 | mpc.bus(:,2)==3,1:4);
将logical indexing用于mpc.bus
。
答案 1 :(得分:2)
使用ismember
检查第二列中的元素是否等于2或3.使用matrix indexing完成剩下的工作。
MatrixPVREF = mpc.bus(ismember(mpc.bus(:,2),[2 3]),1:4);
>> MatrixPVREF
MatrixPVREF =
110 3 50 30
120 2 80 45