【问题标题】:How to join two numeric arrays into a single string separated by a colon?如何将两个数值数组连接成一个用冒号分隔的字符串?
【发布时间】:2016-05-20 07:01:42
【问题描述】:

我有一个情况:我有一个向量A,比如说10000x1,还有另一个向量B 10000x1,都是带有浮点数的数值数组在里面。现在我想将数据写入一行字符串,如下所示:

A(1):B(1) A(2):B(2) ....A(10000):B(10000)

有没有一种有效的方法来做到这一点?现在,我只是使用for循环,先将浮点数更改为字符串,然后添加':',然后将它们连接在一起。这是非常缓慢的。有人可以帮忙吗?非常感谢。

【问题讨论】:

  • 请提供一些实际数字作为示例。目前是模棱两可的。如果A = [3,5,1,...B = [8,9,5,... 那么你希望你的字符串是'3:8 5:9 1:5 ....' 还是'3 4 5 6 7 8 5 6 7 8 9 1 2 3 4 5 ....'?如果是前者我推荐sprintf('%d:%d ', [A,B]')
  • 我回答之前的一个附带问题:你为什么不想这样做?这将是一个很长的字符串
  • @Dan 3:8 5:9 1:5 ....是正确的理解。但是如果A是整数向量,B是双向量,怎么办?我尝试了 sprintf('%d:%f ', [A,B]'),但它不起作用。输出只包含 A,没有 B。
  • @yzhu 我没有意识到你在为AB 使用列向量。试试这个:sprintf('%d:%f ', [A,B])
  • @yzhu - 那是因为您刚刚切换回行向量!您问题中的A10000-by-1,但现在您使用的是1-by-10。其中一个需要转置...如果您想安全起见,请使用(:) 技巧,例如thewaywewalk 建议将向量强制为列向量,以便sprintf('%d:%f ', [A(:),B(:)]')

标签: string matlab vector


【解决方案1】:

对于维度nx1(列矩阵)

tic
A=rand(10000,1);
B=rand(10000,1);

finalString=sprintf(' %f:%f',[A.'; B.']);
finalString(1)=[];
toc

经过的时间是 0.036697 秒。

对于维度1xn(行矩阵)

tic
A=rand(1,10000);
B=rand(1,10000);

finalString=sprintf(' %f:%f',[A; B]);
finalString(1)=[];
toc

经过的时间是 0.036879 秒。

值类型

%f --> 浮点数(定点表示法)

%d --> 整数,有符号(Base 10)

更多值类型http://in.mathworks.com/help/matlab/ref/sprintf.html有一个表格,用于将数字和字符数据格式化为文本,或者您可以在matlab帮助中搜索sprintf

【讨论】:

  • 您好,感谢您的回复。但是当 A 是一个整数向量时怎么样,比如从 1 到 N。我使用 finalString=sprintf(' %d:%f',A,B);但输出是: 1:2.00000 3:4.00000 .....它似乎只输出A,没有B出现。我想知道为什么会这样。
  • 像这样使用它finalString=sprintf(' %d:%f',[A;B]);
  • @yzhu 这实际上不像问题中所述的那样工作,因为它垂直连接列向量。如果它对您有用,那是因为您的 AB 实际上是行向量(与此答案使用的不同,也与您的问题指定的不同)
【解决方案2】:

这应该相对较快地完成。如果有人提供替代实现,我会包含一个 tic-toc 以提供参考执行时间。

tic
a=rand(10000,1);
b=rand(10000,1);

c=zeros(20000,1);
c(1:2:end)=a;
c(2:2:end)=b;

c_string=mat2str(c);
idx=find(c_string==';');
c_string(idx(1:2:end))=':';
c_string(idx(2:2:end))=' ';
toc
%Elapsed time is 0.365694 seconds.

【讨论】:

    猜你喜欢
    • 2020-03-09
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多