如何在Matlab中将矢量转换为数字?

时间:2015-02-13 17:47:26

标签: matlab

我有一个向量,A = [2 2 4 5]。我想将A转换为数字。答案应该是2245。

实施例2.B = [5,6,7,8,9]。答案应该是56789。

感谢。

PS。谢谢大家。现在我理解将矢量转换为字符串并删除空格,然后转换回数字。

5 个答案:

答案 0 :(得分:3)

你可以试试这个 -

>> a = [2 3 10];
>> str2num(strrep(num2str(a), ' ', ''))
ans =
    2310

为什么会这样?好吧,num2str(“数字到字符串”)将矢量转换为其字符表示

>> num2str(a)
ans =
    2   3   10

这几乎是你想要的,除了数字之间的空格。因此,您调用strrep(“string replace”)将所有空格(' ')替换为空字符串(''

>> strrep('hi there', ' ', '')
ans =
    hithere

最后使用str2num(“string to number”)将结果字符串转换回数字。

答案 1 :(得分:2)

获取每个数字,将其转换为字符串并连接结果。取这个字符串并将其转换回数字。您可以在数组上使用num2str,使用ismember删除此转化产生的所有空格,然后将字符串转换回num2str的数字:

C = [2 3 10];
strC = num2str(C);
strC(ismember(strC, ' ')) = [];
out = str2num(strC)

out = 

2310

或者,您可以在运行num2str后使用strrep替换所有空格,然后转换回数字:

C = [2 3 10];
strC = num2str(C);
strC = strrep(strC, ' ', '');
out = str2num(strC)

out = 

2310

给克里斯泰勒戴上帽子,这一切都可以在一行中完成:

out = str2num(strrep(num2str(C), ' ', ''))

out = 

2310

另一个用于学术目的的是使用正则表达式。具体来说,对从num2str输出的转换后的字符串数组使用regexprep,并替换所有空格:

C = [2 3 10];
strC = num2str(C);
out = str2num(regexprep(strC, '\s*', ''))

out = 

2310

模式\s*搜索0个或更多空白字符。我们发现这些并将它们置之不理。

答案 2 :(得分:2)

感谢@obchardon进行更正。

这只使用算术(没有字符串)。它适用于大于0的数字。 A可以是行或列向量。

A = [2 0 3 10];
x = cumsum(floor(log10(A.'+(A.'==0)))+1);
x = x(end)-x;
result = A(:).'*10.^x

给出了

result =
       20310

答案 3 :(得分:1)

如果要将所有数字串在一起,就像它们是单个整数中的数字一样,您可以将矢量转换为字符串,删除空格以将数字合并在一起,然后将其转换回单个数字。

这种方式将处理每个向量元素中的任意数量的数字(假设它们都是实数整数),而不是试图将每个元素乘以10的相应幂并取总和。

示例代码:

A = [2 44 12 6];
Astr = num2str(A);
Astr(strfind(Astr, ' ')) = [];
Anum = str2double(Astr);

答案 4 :(得分:1)

这使用num2str而不必担心空格。 使用num2strarrayfun应用于每个数字,con cat输入生成的字符串,然后转换回数字。可悲的是,它比空格删除或数字方法慢得多。

numStrings = arrayfun(@num2str,a,'uni',0);
out = str2num(cat(2,numStrings{:}))
out =
        2310