matlab字符串向量/数组处理(乘法u和str2num)

时间:2013-01-09 09:57:48

标签: string matlab vector matrix-multiplication

我想了解这是否真的正确,或者这可能是matlab中的一个问题。

我通过以下方式创建一个字符串向量/数组:

>>a=['1','2';'3','4']

它返回:

 a =
    12
    34

现在我想将内容从字符串转换为数字,并将其乘以数字:

>>6*str2num(a)

结果如下:

 a =
    72
    204

我不明白为什么逗号分隔的元素(字符串)将被连接而不是分开处理。如果使用数字而不是字符串,它们将被分开处理。然后它看起来像这样:

>> a=[1,2;3,4]

a =
     1     2
     3     4

>> 6*a

ans =
     6    12
    18    24

我希望得到相同的结果。有什么想法吗?

由于

2 个答案:

答案 0 :(得分:4)

您是否阅读了how string handling is done in MATLAB

基本上,多个字符串只能存储为列向量(字符串)。如果尝试存储为行向量,它们将被连接。这就是字符串'1''2'被连接起来的原因,以及'3''4'。另请注意,只有在所有结果字符串长度相同的情况下才能实现这一点。

我不确定你要做什么,但如果你想将字符串存储为矩阵(即连续多个字符串),可以考虑将它们存储在单元格数组中,例如:

>> A = {'1', '2'; '3', '4'}

A = 
    '1'    '2'
    '3'    '4'

>> cellfun(@str2num, A)

ans =
    1     2
    3     4

答案 1 :(得分:1)

我会说使用像@EitanT建议的单元格阵列可能是最适合你的解决方案。

但是,可以通过手动插入空格和排列字符数来处理字符串(或者更确切地说是字符)。

例如

>> a=['1 2';'3 4']

产生

a =

1 2
3 4

并使用

>> 6*str2num(a)

产生

ans =

     6    12
    18    24

使用

在矩阵和字符串之间转换
b=[1,2;3,10000];
num2str(b)

自动插入空格,字符排列正确。这会产生

ans =

1      2
3  10000