【问题标题】:matlab string vector / array handling (multiplication u and str2num)matlab 字符串向量/数组处理(乘法 u 和 str2num)
【发布时间】:2013-01-09 09:57:47
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: string matlab vector matrix-multiplication


    【解决方案1】:

    你读过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
    

    【讨论】:

    • 谢谢,是的,我读过,但不是 100% 确定。答案又好又快,再次感谢
    【解决方案2】:

    我想说像@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
    

    【讨论】:

    • +1:我忘了str2num 可以解析空格分隔的值。顺便说一下,a的初始化可以缩短为a = ['1 2'; '3 4']
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多