1

我正在做一个项目,我想在 Matlab 中对这些代码行进行矢量化(如果可能的话):

for j=1:length(image_feature(i,:))
    string1b=strcat(num2str(j),':',num2str(image_feature(i,j)));
    write_file1b=[write_file1b string1b ' '];
end

基本上,我想要得到的是以下方式的输出字符串:

1:Value1 2:Value2 3:Value3 ....

请注意,ValueX 是一个数字,因此一个真实的示例将是这样的输出:

1:23.2 2:34.3 3:110.8 

这可能吗?我正在考虑做一些事情,比如创建另一个值从 1 到 j 的向量,以及另一个只有“:”的 j 长向量和一个 num2str(image_feature(i,:)),然后希望有一个函数 f (像矢量化strcat),如果我这样做:

f(num2str(1:j),colon_vector,num2str(image_feature(i,:))) 

会给我上面提到的输出。

4

2 回答 2

2

您可以向量化所有数组操作以非常有效地创建数字数组或矩阵,但由于 MATLAB 中字符串的本质,您无法向量化输出字符串的创建。从理论上讲,如果您有像 C++ 中的固定长度字符串,您可以同时写入字符串中的不同内存位置,但这不是 MATLAB 支持的。即使是这样,看起来你有可变长度的数字,所以即使这样也很困难(除非你要为每个数字对分配特定数量的空间,从而导致数字对之间的可变长度空间。它没有看起来您想这样做,因为您的示例在所有数字对之间只有一个空格)。

如果您对有效地创建向量感兴趣,twerdster 提供的答案可以实现这一点,但即使在该代码中,sprintf 语句也不是并发的。他的代码确实摆脱了 for 循环,从而提高了效率,所以我更喜欢他的代码而不是你的代码。

于 2013-08-12T01:54:40.413 回答
2

我不确定我是否理解您的问题,但也许这可能会有所帮助

val=[23.2 34.3 110.8]
output = [1:length(val); val]
sprintf('%i: %f ',output)

作为输出我得到

1: 23.200000 2: 34.300000 3: 110.800000
于 2013-08-12T01:37:14.657 回答