Suv*_*var 2 vector apply sapply julia
我想将具有多个参数的函数应用于向量。看来 和 都有map()
帮助map!()
。
如果函数有一个参数,它就可以完美地工作:
f = function(a)
a+a
end
x=[1,2,3,4,5]
map(f, x)
Run Code Online (Sandbox Code Playgroud)
输出:[2, 4, 6, 8, 10]
但是,尚不清楚如何将参数传递给函数(如果可能)以及要广播的向量(如果函数有多个参数)。
f = function(a,b)
a*b
end
Run Code Online (Sandbox Code Playgroud)
但是,以下功能均不起作用:
b=3
map(f(a,b), x, 3)
map(f, x, 3)
map(f, a=x, b=3)
map(f(a,b), x, 3)
map(f(a,b), a=x,b=3)
Run Code Online (Sandbox Code Playgroud)
预期输出:
[3,6,9,12,15]
小智 5
一种可能的解决方案是创建一个anonymous function
内部地图,如下所示 -->
x = [1, 2, 3, 4, 5]
b = 3
f = function(a, b)
a * b
end
map(x -> f(x, b), x)
Run Code Online (Sandbox Code Playgroud)
产生以下输出-->
5-element Vector{Int64}:
3
6
9
12
15
Run Code Online (Sandbox Code Playgroud)
Explanation :-
匿名函数从向量中获取值作为其第一个参数,第二个参数用 固定b = 3
。
使用广播 - 正如您在问题中所建议的那样:
julia> f = function(a,b)
a*b
end
#1 (generic function with 1 method)
julia> x=[1,2,3,4,5]
5-element Vector{Int64}:
1
2
3
4
5
julia> b=3
3
julia> f.(x, b)
5-element Vector{Int64}:
3
6
9
12
15
Run Code Online (Sandbox Code Playgroud)
map
不广播,因此 ifb
是标量,您需要手动编写:
julia> map(f, x, Iterators.repeated(b, length(x)))
5-element Vector{Int64}:
3
6
9
12
15
Run Code Online (Sandbox Code Playgroud)
但是,您可以map
毫无问题地传递两个可迭代对象:
julia> map(f, x, x)
5-element Vector{Int64}:
1
4
9
16
25
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1009 次 |
最近记录: |