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

如何在Matlab中将向量转换为数字?,matlab,Matlab,我有一个向量,a=[2 4 5]。我想把A转换成数字。答案应该是2245 例2。B=[5,6,7,8,9]。答案应该是56789 谢谢 另外,谢谢大家。现在我理解了如何将向量转换为字符串并删除空格,然后再转换回数字。获取每个数字,将其转换为字符串并连接结果。把这个字符串转换成一个数字。您可以在数组上使用,使用删除此转换产生的所有空格,然后使用以下命令将字符串转换回数字: 或者,您可以使用在运行num2str后将所有空格替换为零,然后将其转换回数字: C = [2 3 10]; strC = nu

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

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

谢谢


另外,谢谢大家。现在我理解了如何将向量转换为字符串并删除空格,然后再转换回数字。

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

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

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

out = 

2310
向Chris Taylor致敬,这一切都可以在一行中完成:

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

out = 

2310
还有一个学术目的是使用正则表达式。具体来说,在从num2str输出的转换字符串数组上使用,并将所有空格替换为零:

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

out = 

2310
模式\s*搜索0个或多个空白字符。我们找到这些,并将它们设置为“无”。

您可以试试这个-

>> a = [2 3 10];
>> str2num(strrep(num2str(a), ' ', ''))
ans =
    2310
它为什么有效?num2str number to string将向量转换为其字符表示形式

>> num2str(a)
ans =
    2   3   10
这几乎就是你想要的,除了数字之间的空格。因此,调用strrep string replace将所有空格“”替换为空字符串


最后,使用str2num string to number将结果字符串转换回数字。

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

这种方法将处理每个向量元素中任意数量的数字,假设它们都是实整数,而不是试图将每个元素乘以各自的10次幂并求和

示例代码:

A = [2 44 12 6];
Astr = num2str(A);
Astr(strfind(Astr, ' ')) = [];
Anum = str2double(Astr);
谢谢你的更正

这只使用算术,不使用字符串。它适用于大于0的数字。向量可以是行向量或列向量

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

result =
       20310
它使用num2str而不必担心空格。 使用arrayfun将num2str应用于每个数字,连接结果字符串,转换回数字。遗憾的是,它比删除空白或数字方法要慢得多

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

如果数字大于10怎么办?这听起来像是一个有趣的实验,但你的问题很可能会被否决,除非你能表现出更多的思考和努力来解决这个问题。你对这应该如何工作的最初想法是什么?是什么阻止您在Matlab中完成它?你能用Javascript、C或你最喜欢的语言来解决这个问题吗?我对Matlab是新手。只是个初学者。我没有任何编程经验,所以我边学边用。比如C=[2 3 10]?回答应该是2310。@timrow-不客气。你可以通过接受我们的一个答案来帮助我们。这对StackOverflow社区意味着您不再需要任何帮助。您可能还想将字符串变回数字。啊,我错过了他想要数字结果的消息。我要补充一点+顺便说一句,你的答案比我的要全面一点——尽管我更喜欢用一个表达式来表达一切,如果它仍然容易理解的话。lol np。顺便说一下,当你替我回答的时候,我正在写斯特雷普的文章。哦。顺便说一句,+1。@LuisMendo-我在C=[2 3 10]上试过这个;,我得到的结果是一个两元素向量,包含[2310]:str2numnum2str[2 3 10],“%I”@rayryend是的,我以为数字只能小于10。对不起@路易斯门多-没问题,我的朋友:顺便说一句,你只用数字的方法非常好+1给你。当我认为数字只有0,…,9的时候真是太好了。现在它有点拉伸:-但它将失败为log100。cumsumfloorlog10A.'+A.==0+1可用于稳健性
result =
       20310
numStrings = arrayfun(@num2str,a,'uni',0);
out = str2num(cat(2,numStrings{:}))
out =
        2310