Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在matlab中添加新值';基于条件的表?_Arrays_Matlab - Fatal编程技术网

Arrays 如何在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

考虑在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(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:这可能是一个需要解决的“问题”。你的方式看起来确实更漂亮。:)