我确信有办法做到这一点,但我不知道它是什么。
假设我有一个向量
v = [1.02 2.03 3.04];
我希望使用每个元素的格式字符串将其转换为单元格数组:
' %.3f'
(%。3f前3个空格)
我该怎么做?我尝试了以下方法,但是我收到了一个错误:
>> f1 = @(x) sprintf(' %.3f',x);
>> cellfun(f1, num2cell(v))
??? Error using ==> cellfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
答案 0 :(得分:6)
如错误中所述,只需将UniformOutput
的参数设为false
cellfun(f1, num2cell(v), 'UniformOutput', false)
ans =
' 1.020' ' 2.030' ' 3.040'
答案 1 :(得分:2)
这是另一种解决方案:
>> v = [1.02 2.03 3.04];
>> strcat({' '}, num2str(v(:),'%.3f'))
ans =
' 1.020'
' 2.030'
' 3.040'
显然,如果你想要一个行向量,你可以调换结果。
答案 2 :(得分:1)
您还可以使用{}
语法:
cellfun(@(x){f1(x)}, num2cell(v))
另请查看:Applying a function on array that returns outputs with different size in a vectorized manner