における二つの行列の列のすべてのペアに関数を適用、私は行列A
とB
に列ベクトルのすべてのペアに関数を適用したいと思います。私は効率的な(非for
)これを行う方法がなければならないことを知っているが、私はそれを把握することはできません。この関数はスカラーを出力します。は、MATLABでMATLAB
3
A
答えて
7
na = size(A,1);
nb = size(B,1);
newvector = bsxfun(@(j,k)(func(A(j,:),B(k,:))),1:na,(1:nb)');
bsxfun
1にシングルトン拡張を実行してみてください:NAおよび(1:NB)」。この場合の最終結果は、AとBから描画された列ベクトルのすべてのペアにfuncが適用されることです。
bsxfunは扱いにくい可能性があることに注意してください。この場合、あなたが望む仕事をするために働くでしょう。
1
ペアワイズを意味しますか?したがって、for-loopでは、関数はscalar_val = func(A(i),B(i))
として機能しますか?
newvector = arrayfun(@(x) func(A(x),B(x)), 1:numel(A));
UPDATE:
あなたはscalar_val = func(A(i), B(j))
としてAとBのすべての組み合わせを実行する必要があなたのコメントよるA
とB
が同じサイズを持っている場合
あなたはARRAYFUN関数を適用することができます。これはもう少し複雑で、大きなベクトルはメモリをすばやく埋めることができます。
あなたの関数は、標準の一つである場合は、BSXFUNを使用して試すことができます:
out = bsxfun(@plus, A, B');
もう一つの方法は、MESHGRIDとARRAYFUNを使用することです:
[Am, Bm] = meshgrid(A,B);
out = arrayfun(@(x) func(Am(x),Bm(x)), 1:numel(Am));
out = reshape(out, numel(A), numel(B));
「私はそれが動作するはずと信じていますが、私はドン今すぐテストする時間があります。
+0
これは 'scalar_val = func(A(i)、B(j))'であるべきです。 – srubin
関連する問題
- 1. MATLABは、MATLABで変数名
- 2. MATLABでのMatlab
- 3. データブレークポイントmatlab Matlab
- 4. は、MATLAB
- 5. は、MATLAB
- 6. は、MATLAB
- 7. はMATLAB
- 8. は、MATLAB
- 9. は、MATLAB
- 10. は、MATLAB
- 11. は、MATLAB
- 12. は、MATLAB
- 13. は、MATLAB
- 14. は、MATLAB
- 15. MATLABで
- 16. Matlab:プログラムでMatlabアプリケーションを実行
- 17. Matlab ./ sign;基本的なmatlab
- 18. MATLAB
- 19. MATLAB
- 20. MATLAB
- 21. Matlab
- 22. 、MATLAB
- 23. 、MATLAB
- 24. MATLAB
- 25. MATLAB
- 26. MATLAB
- 27. MATLAB
- 28. MATLAB
- 29. MATLAB
- 30. Matlab
私のfuncはドットプロダクトですが、ドットの引数が同じでなければならないというエラーが出ましたサイズ...何か問題が起こっている? – Bob
@Bob列で呼び出すのではなく、行で呼び出す必要があります: 'bsxfun(@(j、k)func(A(:、j)、A(:k))、1:na、 :nb) ') '作品ですか? – Shai