3

我想了解这是否真的正确,或者这可能是 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

我希望得到同样的结果。有任何想法吗 ?

谢谢

4

2 回答 2

4

您是否阅读过有关如何在 MATLAB 中进行字符串处理的信息?

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

我不确定您要做什么,但是如果要将字符串存储为矩阵(即一行中的多个字符串),请考虑将它们存储在单元格数组中,例如:

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

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

>> cellfun(@str2num, A)

ans =
    1     2
    3     4
于 2013-01-09T10:09:03.650 回答
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
于 2013-01-09T10:27:51.677 回答