用函数初始化矩阵
Initializing matrix with a function
我在 Julia 中寻找类似推导式的东西,但要寻找矩阵而不是向量。如果我有一些单变量函数 f(x)
并且我想要一个用 f(i)
填充的数组 for i
in 1..10
,我可以这样做:
[f(i) for i = 1:10]
如果我有一些双变量函数 g(i,j)
并且我想要一个来自 i=[1,10]; j=[1,10]
的矩阵填充该函数,我可以这样做:
M = zeros (10,10)
for i in 1:10
for j in 1:10
M[i,j] = g(i,j)
end
end
是否有一些捷径可以让我以更短的方式表达,而不浪费时间分配所有零?
直接用一个multidimensional comprehension就可以了:
julia> g(x,y) = 2x+y
g (generic function with 1 method)
julia> [g(i,j) for i=1:10, j=1:10]
10x10 Array{Int64,2}:
3 4 5 6 7 8 9 10 11 12
5 6 7 8 9 10 11 12 13 14
7 8 9 10 11 12 13 14 15 16
9 10 11 12 13 14 15 16 17 18
11 12 13 14 15 16 17 18 19 20
13 14 15 16 17 18 19 20 21 22
15 16 17 18 19 20 21 22 23 24
17 18 19 20 21 22 23 24 25 26
19 20 21 22 23 24 25 26 27 28
21 22 23 24 25 26 27 28 29 30
通过在末尾添加变量范围,这适用于任意数量的维度。
我在 Julia 中寻找类似推导式的东西,但要寻找矩阵而不是向量。如果我有一些单变量函数 f(x)
并且我想要一个用 f(i)
填充的数组 for i
in 1..10
,我可以这样做:
[f(i) for i = 1:10]
如果我有一些双变量函数 g(i,j)
并且我想要一个来自 i=[1,10]; j=[1,10]
的矩阵填充该函数,我可以这样做:
M = zeros (10,10)
for i in 1:10
for j in 1:10
M[i,j] = g(i,j)
end
end
是否有一些捷径可以让我以更短的方式表达,而不浪费时间分配所有零?
直接用一个multidimensional comprehension就可以了:
julia> g(x,y) = 2x+y
g (generic function with 1 method)
julia> [g(i,j) for i=1:10, j=1:10]
10x10 Array{Int64,2}:
3 4 5 6 7 8 9 10 11 12
5 6 7 8 9 10 11 12 13 14
7 8 9 10 11 12 13 14 15 16
9 10 11 12 13 14 15 16 17 18
11 12 13 14 15 16 17 18 19 20
13 14 15 16 17 18 19 20 21 22
15 16 17 18 19 20 21 22 23 24
17 18 19 20 21 22 23 24 25 26
19 20 21 22 23 24 25 26 27 28
21 22 23 24 25 26 27 28 29 30
通过在末尾添加变量范围,这适用于任意数量的维度。