Matlab:将向量转换为字符串的单元数组

5
我相信有一种方法可以做到这一点,但我不知道是什么。
假设我有一个向量。
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.

2
糟糕!我希望错误信息能更清晰一些。比如说 你可能想使用cellfun(..., 'UniformOutput', false) - Jason S
顺便说一句,你肯定很熟悉,但最近我学到了 sprintf 在数组中也可以使用:即你可以使用 sprintf(' %.3f',v) 来打印所有元素。也许,你正在为类似这样的东西创建单元格? - petrichor
那是另一种可能性(将其转换为2-D字符串,然后转换为单元数组),但缺点是它会用空格填充字符串的行。 - Jason S
3个回答

6

正如错误提示所述,只需将UniformOutput参数设置为false

cellfun(f1, num2cell(v), 'UniformOutput', false)

ans = 

    '   1.020'    '   2.030'    '   3.040'

或者使用{}语法 - cellfun(@(x){f1(x)}, num2cell(v)) - Andrey Rubshtein

2

以下是另一种解决方案:

>> v = [1.02 2.03 3.04];
>> strcat({'   '}, num2str(v(:),'%.3f'))
ans = 
    '   1.020'
    '   2.030'
    '   3.040'

显然,如果您需要行向量,可以对结果进行转置。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接