如何在 MATLAB 中将逻辑列转换为双精度 table

How to convert logical columns to double in MATLAB table

对于我的任务,我需要将 table 中的所有逻辑列转换为双精度。 table 已排序,因此我想保持列的顺序。

这是一个小例子:

SomeString={'one';'two';'three'}
SomeNumbers={1;2;3}
SomeLogicals=[true; false; true]
T=table(SomeString, SomeNumbers, SomeLogicals)

T(:,vartype('logical'))=cell2table(cellfun(@double,table2cell(T(:,vartype('logical'))),'uniformOutput',false))

为什么列仍然合乎逻辑?

T(:,vartype('logical'))

  3×1 table

    SomeLogicals
    ________

       true     
       false    
       true

我该如何转换它们?

根据你对我评论的回复,这应该可以满足你的要求

logicalColumns = T.Properties.VariableNames(cellfun(@(x) islogical(T.(x)), T.Properties.VariableNames));
for c = 1:length(logicalColumns)
  T.(logicalColumns{c}) = double(T.(logicalColumns{c}));
end

这里我们获取包含逻辑值的列的名称,然后遍历这些列,将它们设置为 10 的双倍值 truefalse.