将以下简短的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
变量?
答案 0 :(得分: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);
答案 1 :(得分:1)
内联函数不能返回多个输出似乎很奇怪。有几种解决方法是可行的:
如果矢量是2D,您可以随时将它们打包为复数。
您可以将结果编入索引。例如。 v = f(x,y)
并使用v(1)
和v(2)
使用deal
,如下所示:
f=@(x,y) deal(-y, x)
[a,b] = f(1,2)
返回:a=-2
和b=1
在我看来,第二个选项是最干净的(或者你只能声明一个function
而不是使用内联函数.MATLAB现在支持函数内的函数,类似于python)。