1

次の簡単な python/numpy コードを matlab に変換する最良の方法は何ですか?

from numpy import *

F = lambda x, y: (-y, x)

points = array(meshgrid([1,2,3], [4,5,6,7]))
vx, vy = F(*points)
print vx, vy

上記のコードでは、Fはベクトル値の速度フィールドを表すことを意図しています。具体的には、ベクトル値関数はセルを使用して表現する必要がありますか、それともより良い方法がありますか?

上記のコードを翻訳する最初の試み:

F = @(x,y) {-y, x};

[X, Y] = meshgrid(1:3, 4:7);
rslt = F(X, Y); 
[vx, vy] = rslt{:};

それを行うよりエレガントな方法はありますか?たとえば、中間変数[vx, vy] = F(X,Y);を定義するのではなく、このように呼び出すことができるように、無名関数は複数の値を返すことができますか?rslt

4

2 に答える 2

1

インライン関数が複数の出力を返すことができないのは奇妙に思えます。いくつかの回避策が考えられます:

  1. ベクトルが 2D の場合は、いつでも複素数としてパックできます。

  2. 結果にインデックスを付けることができます。例v = f(x,y)と使用v(1)v(2)

  3. 次のように使用dealします。

    f=@(x,y) deal(-y, x)
    [a,b] = f(1,2)
    

    戻り値:a=-2およびb=1

私の意見では、2 番目のオプションが最もクリーンです (または、インライン関数を使用する代わりに a を宣言することもできfunctionます。MATLAB は、Python と同様に、関数内の関数をサポートするようになりました)。

于 2011-08-15T06:37:49.780 に答える
1

次の 2 つの関数に分割できます。

%# each is a function of two variables
Fx = @(x,y) -y;
Fy = @(x,y) x;

[X,Y] = meshgrid(1:3, 4:7);
vx = Fx(X,Y);
vy = Fy(X,Y);
于 2011-08-15T01:18:51.333 に答える