Arrays 如何在matlab中添加新值';基于条件的表?
考虑在matlab中使用此表:Arrays 如何在matlab中添加新值';基于条件的表?,arrays,matlab,Arrays,Matlab,考虑在matlab中使用此表: t = table([1; 0; 3; 1], [0; 1; 0; 4], 'VariableNames', {'A', 'B'}); A B _ _ 1 0 0 1 3 0 1 4 我想添加一个新列C,其中包含基于条件的特定值。目前我使用这个循环: for i=1:height(t) if t(i, 'A').Variables == 1 t.C(i, 1) = 4; elseif t
t = table([1; 0; 3; 1], [0; 1; 0; 4], 'VariableNames', {'A', 'B'});
A B
_ _
1 0
0 1
3 0
1 4
我想添加一个新列C
,其中包含基于条件的特定值。目前我使用这个循环:
for i=1:height(t)
if t(i, 'A').Variables == 1
t.C(i, 1) = 4;
elseif t(i, 'A').Variables == 3
t.C(i, 1) = 5;
end
end
但是,如果表大小大于100k行,则这是一个耗时的操作
什么是最好的解决方案?您可以使用以下方法:
[t{t.A==1, 'C'}] = 4;
[t{t.A==3, 'C'}] = 5;
这使用了以下事实:
- 表内容可以通过
索引,就像在单元格数组中一样李>{}
- 表列可以按其名称编制索引
t.C(t.A==1)=4;
t.C(t.A==3)=5;
这使用点符号来索引列。结果是一个数值列向量,可以直接为其指定标量。或
t.C(t.a==1)=4代码>t.C(t.A==3)=5代码>第二个选项似乎不会产生与第一个选项相同的输出t.C
在第一种情况下是列向量,在第二种情况下是4x4矩阵。(我在MatlabR2017A上,使用OP对t
的定义)。我得到一个警告:“警告:添加到表中的新变量的行数少于表中的行数。它们被扩展为包含默认值的行。”啊,它必须是t.C(t.a==1,1)=4;t、 C(t.A==3,1)=5
显式索引行。@CrisLuengo上没有这样的东西R2018a@SardarUsama:这可能是一个需要解决的“问题”。你的方式看起来确实更漂亮。:)