gpt4 book ai didi

matrix - 使用 Julia 计算网格中点的矩阵表达式

转载 作者:行者123 更新时间:2023-12-01 11:35:02 26 4
gpt4 key购买 nike

我有一小部分(可能效率低下)Matlab 代码,它生成了一个网格网格点乘积函数的值矩阵。例如:

N = 2 ;
r = -N:N ;
[X1, X2] = ndgrid( r, r ) ;
f = @( x ) ( x ) ; % identity: dummy function for this example.
X1
X2
f( X1 .* X2 )

生产:
X1 =

-2 -2 -2 -2 -2
-1 -1 -1 -1 -1
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2


X2 =

-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2


ans =

4 2 0 -2 -4
2 1 0 -1 -2
0 0 0 0 0
-2 -1 0 1 2
-4 -2 0 2 4

这是基于 this answer ,还有这个 Matlab Evaluate Function over gridded domain help文本。

我可以在 Julia 中通过网格位置上的一组循环来实现:
N = 2 ;
r = -N:N ;
twoNplusOne = 2*N + 1 ;

F = zeros( twoNplusOne, twoNplusOne ) ;
f = identity ; #say
for n = 1:twoNplusOne
for m = 1:twoNplusOne
F[ n, m ] = f( r[n]*r[m] ) ;
end
end

F

...但想知道在 Julia 中是否有更自然(和有效)的方法来做到这一点?

最佳答案

不确定这是否是规范的 Julian 方法,但您可以使用 broadcast :

julia> broadcast((x,y)->f(x*y), -N:N, (-N:N)')
5x5 Array{Int32,2}:
4 2 0 -2 -4
2 1 0 -1 -2
0 0 0 0 0
-2 -1 0 1 2
-4 -2 0 2 4

我用过的地方 '将范围从大小之一变为 (5,)(1,5) 之一.实际上,在这种特殊情况下,由于该函数接受一个标量参数并且仅取决于您的 X1 和 X2 的乘积,我们甚至可以逃脱
julia> f((-N:N) .* (-N:N)')
5x5 Array{Int32,2}:
4 2 0 -2 -4
2 1 0 -1 -2
0 0 0 0 0
-2 -1 0 1 2
-4 -2 0 2 4

但总的来说,这不一定是真的。

关于matrix - 使用 Julia 计算网格中点的矩阵表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27915394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com