将具有多个参数的函数应用于 Julia 中的向量

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


Bog*_*ski 5

使用广播 - 正如您在问题中所建议的那样:

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)