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. 如果向量是二维的,您总是可以将它们打包为复数。

  2. 你可以只索引结果。例如v = f(x,y)和使用v(1)v(2)

  3. 使用deal如下:

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

    返回:a=-2b=1

在我看来,第二个选项是最干净的(或者您可以只声明 afunction而不是使用内联函数。MATLAB 现在支持函数中的函数,类似于 python)。

于 2011-08-15T06:37:49.780 回答
1

您可以将其拆分为两个功能:

%# 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 回答