将单元格数组转换为字符串数组

时间:2015-01-17 04:20:58

标签: arrays string matlab cell

我从Excel导入了一些信息,包括字符串和数字。我以原始格式在MATLAB中读取Excel文件

现在,我在一个大矩阵中有一列

 [1]
 '1A'
 [2]
 [3]
 [4]
 [505]
 [601]
 [7]
 [8]

这就是xlsread命令给我的方式。我想将所有这些转换成字符串 ['1' , '1A', '2' and so on..]

我正在努力做到这一点。我希望每个元素都没有空格。我的意思是它不应该像[ ' 1', ' 1A', ' 2' and so on]....

2 个答案:

答案 0 :(得分:1)

尝试将cellfunnum2str合并为:

A = {1, '1A', 2, 3, 4, 505, 601, 7, 8}'
str = cellfun(@(c) num2str(c), A, 'UniformOutput', false).'
str = 

    '1'    '1A'    '2'    '3'    '4'    '505'    '601'    '7'    '8'

您可以在stings上使用num2str,因此您无需检查变量是字符串还是数值。请注意,结果中的空格位于元素之间,而不是元素本身。所以,

str(1)  
ans =    
    '1'    
str(2)    
ans =     
    '1A'

如果你的输入数据可能包含空格(你的样本没有),你可以通过使用这样的额外cellfun来消除这些空格:

cellfun(@(c) c(c~=' '), str, 'UniformOutput', false) 

附注:在大多数MATLAB函数中,您可以缩短参数名称,例如UniformOutput, false。这可以是un, 0uni, 0 ...等,只要这些字母代表一个唯一的参数而不能代表其他东西。如果你在命令窗口中编写它,这是一个很好的技巧,但我会在实际代码中避免它,因为如果MathWorks决定创建一个名为unit的参数,UniformInput它可能会破坏代码或以uni开头的其他内容。只是一点提示=)

答案 1 :(得分:0)

有多种方法可以做到这一点。我假设你提到的矩阵是一个单元格数组?这意味着它可以包含数字和字符串吗?

如果是这样,你可以遍历每个单元格元素并使用isa()来确定每个元素中的对象类型,然后相应地转换为字符串(即num2str())。

如果遇到空格问题,请在matlab中使用与regexpr()相关的函数族,它们可以识别某些字符并执行从字符串中删除它们等操作。