Matlab 基于另一个矩阵操纵一个矩阵
我有一个变量Matlab 基于另一个矩阵操纵一个矩阵,matlab,indexing,Matlab,Indexing,我有一个变量est,它是20x1double,类似这样: 12 15 68 85 0 25 3 ... 1 2 0 1 0 0 2 ... 变量k,也是由0、1或2组成的20x1双精度变量,如下所示: 12 15 68 85 0 25 3 ... 1 2 0 1 0 0 2 ... 我想更改est,以便如果k(I)不是0,则应删除est(I),其中I=1:20。有人能帮忙吗?所说的“空白”是指0吗 est(k(:,1)~=0, 1) = 0; 这段代码在做什么 k(:,1)~=0返回一
est
,它是20x1
double,类似这样:
12
15
68
85
0
25
3
...
1
2
0
1
0
0
2
...
变量k
,也是由0
、1
或2
组成的20x1
双精度变量,如下所示:
12
15
68
85
0
25
3
...
1
2
0
1
0
0
2
...
我想更改est
,以便如果k(I)
不是0
,则应删除est(I)
,其中I=1:20
。有人能帮忙吗?所说的“空白”是指0吗
est(k(:,1)~=0, 1) = 0;
这段代码在做什么
k(:,1)~=0
返回一个20 x 1的逻辑数组,该数组在k
的第一列为非零的行中为真。然后,代码在第1列的est
中对这些行进行寻址,并将值设置为零。这里是一个使用For
循环语句的解决方案。让我知道这是否符合您的期望:
idxList = [];
for ii = 1:size(est,1)
if k(ii,1) == 0
idxList = [idxList ii];
end
end
est(idxList) = [];
代码为在变量
k
中找到的所有零创建索引列表。之后,它将从变量est
中删除与索引列表idxList
中的值相对应的所有值?是否要从矩阵中删除est(i,1)
?是的,我确实要从矩阵中删除est(i,1)
。您所要求的是不可能的。MATLAB不支持不均匀矩阵,其中每行的列数不需要在所有行上匹配。唯一可以做到这一点的方法是使用单元格数组。如果你想考虑单元格数组选项,我可以写一个答案,但在数值矩阵方面,MATLAB不支持删除每行的条目,从而呈现矩阵。我不认为这里的blank=0
。。。。否则,如果你看一下他的问题陈述的上下文,OP可能会说0(即,如果ak(i,1)
不是0)。。。。再说一遍,我也不知道。你不能在矩阵中设置一个值为“空白”。没错,这就是OP现在想要的。。。我想我可以试试est(k(:,1)~=0,1)=NaN;东部标准时间(伊斯南(东部标准时间))=[]代码>est(isnan(est))=[]
将est
转换为一个列向量,并删除NaN元素。我不确定这是否是您想要的。这不是执行此操作的特别惯用方法。您可以用语句idxList=k(:,1)==0
替换整个循环。这一点很好。你确实可以用那一个衬垫来代替这个回路。我已经设置了循环,以便OP可以根据自己的需要修改它。我想他需要在不止一个专栏上这样做。我只有一个专栏,这样一行就可以了。谢谢,伙计们!