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,:)) を作成するようなことを考えていました。ベクトル化されたstrcatのように)私がそうするなら:

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

上記の出力が得られます。

4

2 に答える 2

2

すべての配列操作をベクトル化して、数値の配列または行列を非常に効率的に作成できますが、MATLAB の文字列の性質上、出力文字列の作成をベクトル化することはできません。理論的には、C++ のような固定長の文字列がある場合、文字列内の異なるメモリ位置に同時に書き込むことができますが、これは MATLAB でサポートされているものではありません。たとえそうであったとしても、可変長の数値を持っているように見えるので、それでさえ難しいでしょう (数値のペアごとに特定の量のスペースを割り当て、数値のペア間に可変長のスペースが生じる場合を除きます。そうではありません)あなたの例では、すべての数値ペアの間にスペースが1つだけあるため、それをやりたいように見えます)。

ベクトルを効率的に作成することに興味がある場合は、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 に答える