使用不同数据类型的单元格数组中仅舍入数字元素

时间:2016-07-20 08:40:59

标签: matlab rounding cell-array elementwise-operations heterogeneous-array

我有一个包含不同类型变量(double和amp; strings)的单元格,我想要对单元格中的数字元素进行舍入。 round函数只能用于数组,而不能用于单元格,因此我尝试使用cell2mat - 但是如果单元格中的元素类型不同,则无法使用此函数

任何想法如何围绕此单元格中的数字元素?当然,我不想对细胞元素进行循环。

2 个答案:

答案 0 :(得分:1)

您希望利用str2double功能将非数字类型转换为NaN。

假设您有一个类似的单元格:

 A = {'1.999','3.1415','pie','??'}
 B = round(str2double(A))

 B =

 2     3   NaN   NaN

答案 1 :(得分:1)

正如 Adriaan 所述,这可以通过For i = 0 To n: If a = i Then a = b: Next i 完成:

cellfun

function testCell = q38476362

  testCell = {'t','h',1.004,'s',[],'i',4.99,[],'a',[],'ce',10.8};
  isnum = cellfun(@(x)~isempty(x) & isnumeric(x),testCell);
  testCell(isnum) = num2cell(round([testCell{isnum}],0));

如果您的单元格数组在testCell = 't' 'h' [1] 's' [] 'i' [5] [] 'a' [] 'ce' [11] s和string的位置方面是随机的,那么除了循环/ double / {{3}之外,您无法做多少}。但是,如果存在一些周期性(例如“一个字符串总是后跟两个cellfun条目”),您可能能够构建一些索引向量,它可以获得值而无需迭代(显式或隐式)。