gpt4 book ai didi

string - 如何在matlab中将单元格转换为字符串

转载 作者:太空宇宙 更新时间:2023-11-03 19:08:10 25 4
gpt4 key购买 nike

假设我有一个单元格

v =    'v'    [576.5818]    [3.0286]    [576.9270]

'v' [576.5953] [3.1180] [576.8716]

'f' [ 56] [ 58] [ 52]

'f' [ 56] [ 58] [ 52]

我想使用每个元素的格式字符串将其转换为元胞数组:' %.5f'

我该怎么做?我尝试了以下方法,但出现错误:

f1 = @(x) sprintf('   %.5f',x);
cellfun(f1, num2cell(v),'UniformOutput', false)

我收到一个错误信息???

Error using ==> sprintf

Function is not defined for 'cell' inputs.

Error in ==> @(x)sprintf(' %.5f',x)

谁能帮我提前谢谢

最佳答案

字符串是元胞数组

嗯,不是真的......它是一个矩阵,但请继续阅读。

我猜元胞数组是 MATLAB 中最神秘的数据类型。因此,让我们揭开的神秘面纱 ;-)

假设

fruits = {...
'banana',...
'apple',...
'orange'...
}

首先,小数组不需要整数索引。使用类似 foreach 的结构要好得多。确实,

for index = 1:numel(fruits)
fruits{index}
end

相当于

for fruit = fruits
fruit
end

对吗?

嗯,不完全是。第一个循环生成字符串,第二个循环生成单元格。你可以检查它

for index = 1:numel(fruits)
[isstr(fruits{index}) iscell(fruits{index})]
end

for fruit = fruits
[isstr(fruit) iscell(fruit)]
end

,即 [1 0][0 1]

如果您发现了不同之处,那么您一定知道如何处理下一个示例(在这个示例中确实与您的问题相关(!) 我保证!)。假设您尝试在循环中进行水平串联:

for fruit = fruits
[fruit 'is a fruit']
end

你会得到

ans = 

'banana' 'is a fruit'

等等。为什么?显然,这段代码试图将嵌套的元胞数组连接到一个字符串(一个包含字符矩阵的元胞数组,这些字符矩阵构成了像“banana”这样的字符串)。所以,正确答案是

使用{:}

for fruit = fruits
[fruit{:} 'is a fruit']
end

神奇的是,这已经产生了预期的“香蕉是一种水果”“苹果是一种水果”等。

提示

一些提示:

  • 无索引循环与结构配合得很好,如 for fruit = [fieldnames][1](fruits)'
  • 对于开源 octave
  • ,以上是 正确的
  • 香蕉不仅仅是水果,在分类学上它也是一种草本植物 ;-) 就像 MATLAB 中的“香蕉”既是字符串又是矩阵,即 assert(isstr('banana') && ismat('banana'))通过,但 assert(iscell('banana')) 失败。
  • {:} 等同于 cell2mat

附言

您的问题的解决方案可能如下所示:

给定

vcell = {...
'v' 576.5818 3.0286 576.9270;
'v' 576.5818 3.0286 576.9270
}

仅按索引将数字类型隐藏为字符串

 vcell(cellfun(@isnumeric, vcell)) =  cellfun(@(x) sprintf('%.5f', x), vcell(cellfun(@isnumeric, vcell)), 'UniformOutput', false)

以上代码输出

vcell =

'v'    '576.58180'    '3.02860'    '576.92700'
'v' '576.58180' '3.02860' '576.92700'

可以连接。

关于string - 如何在matlab中将单元格转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13258508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com