我有一个包含不同类型变量(double和amp; strings)的单元格,我想要对单元格中的数字元素进行舍入。
round
函数只能用于数组,而不能用于单元格,因此我尝试使用cell2mat
- 但是如果单元格中的元素类型不同,则无法使用此函数
任何想法如何围绕此单元格中的数字元素?当然,我不想对细胞元素进行循环。
答案 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
条目”),您可能能够构建一些索引向量,它可以获得值而无需迭代(显式或隐式)。