1

同じ長さの 2 つのベクトルに対して 2 つの引数を取る関数をマップし、これらのベクトルのそれぞれから引数を取ります。私は1つの引数でそれを行うことができます:

map(@sqrt, 1:10)
ans = ....

help map次の例を示します。

map(@min, A, B)
ans = ...

ここでA、 とBは 2 行 2 列の行列で、結果の行列は要素ごとの最小値です。しかし、この例を試すと、次のエラーが発生します。

A = rand(2,2);
B = rand(2,2);
map(@min, A, B)
error: invalid assignment to cs-list outside multiple assignment.
error: assignment to cell array failed
error: assignment failed, or no method for `<unknown type> = scalar'
error: called from:
error:   C:\Octave\3.2.4_gcc-4.4.0\share\octave\packages\miscellaneous-1.0.9\map.m at line 108, column 21

私は何を間違っていますか?私のシステムは Win7、64 ビットで、ご覧のとおり、私のオクターブ バージョンは 3.2.4 です。

4

1 に答える 1

1

この質問のおかげで、 が廃止されていることを知ることができました。map使用する正しい機能は ですarrayfun。これは、通常の Windows インストーラーをダウンロードしたときに得たものであるオクターブ バージョン 3.2.4 の両方で、すぐに使用できます。 、および cygwin を使用して取得したオクターブ バージョン 3.6.2 を使用します。バージョン 3.6.2では、パッケージがmap必要なように見えますが、必要ありません。miscellaneousarrayfun

したがって、何が間違っていたのか、またはバグがあるのか​​ どうかはわかりませんが(関数がかなり標準的であるため、ありそうもない)、次のように置き換えるだけで問題が解決しましたarrayfun

A = rand(2,2);
B = rand(2,2);
arrayfun(@min, A, B)
ans = .... % correct answer
于 2012-09-05T13:33:08.733 に答える