Arrays Julia:mapslices()其中被映射的函数有多个输入参数?

Arrays Julia:mapslices()其中被映射的函数有多个输入参数?,arrays,multidimensional-array,julia,broadcast,array-broadcasting,Arrays,Multidimensional Array,Julia,Broadcast,Array Broadcasting,我试图使用mapsicles(也许这甚至不是正确的方法)在多维数组的“切片”上广播函数,其中函数涉及另一个数组,该数组在广播的每次迭代中总是相同的。这可以通过mapslices或map完成吗 这里有一个特别的问题: 我有一个函数F(X,Y),它将二维数组X和Y作为输入。X是大小(D,N),类型为数组{Float32,2}),而Y也是大小(D,1),类型为数组{Float32,2} F(X,Y)对两个矩阵X和Y执行操作,以生成大小为(N,1)的数组输出 广播/映射问题:我有一个更大的三维数组X_a

我试图使用
mapsicles
(也许这甚至不是正确的方法)在多维数组的“切片”上广播函数,其中函数涉及另一个数组,该数组在广播的每次迭代中总是相同的。这可以通过
mapslices
map
完成吗

这里有一个特别的问题:

我有一个函数
F(X,Y)
,它将二维数组
X
Y
作为输入。X是大小
(D,N)
,类型为
数组{Float32,2}
),而Y也是大小
(D,1)
,类型为
数组{Float32,2}

F(X,Y)
对两个矩阵
X
Y
执行操作,以生成大小为
(N,1)
的数组输出

广播/映射问题:我有一个更大的三维数组
X_all
,其“切片”(例如,沿三维方向堆叠的矩阵,如
X[:,:,1]
)是输入数组X的示例,其尺寸
(D,N)
,应该是
F(X,Y)
的输入。而
Y
始终是常数

因此,一个示例
X\u all
的形状是
(D,N,5)
,其中
Y
仍然是
(D,1)
,我希望广播的输出是一个矩阵,其列N存储将
F
应用于
X\u all
Y
的每个片段的结果。因此,本例中的最终输出形状应该是
(N,5)

这不适用于
broadcast
(我得到的错误表明
F(X,Y)
是输入标量浮点数,而不是数组),因此我假设它需要使用
mapsicles
完成。唯一的问题是,我似乎找不到将
mapsicles
与多个输入参数(例如
X
Y
)一起使用的示例——通常我只看到一个输入参数


有什么想法吗?

你对这个问题的书面描述让我有点难以理解,但是如果我正确理解这个问题,你只需要使用带有匿名函数的
X->F(X,Y)

下面是一个例子:

F(X, Y) = X'*Y 

F(rand(3, 4), rand(3, 1))

#+RESULTS:
: 4×1 Array{Float64,2}:
:  0.2038830017261133
:  0.16952327765859904
:  0.25986519462136687
:  0.18604863369789784

啊,是的,我忘了匿名函数格式——谢谢!这正是我所需要的。为了快速跟进——如果我想从输出中删除第二个单体维度(其大小=1),使用
dropdims(result,dims=2)
是最快的方法吗?我相信是的。
#+BEGIN_SRC jupyter-julia
let D = 3, N = 4
    x_all = randn(D, N, 5)
    Y = randn(D, 1)

    mapslices(X -> F(X, Y), x_all, dims=(1,2))
end

#+RESULTS:
4×1×5 Array{Float64,3}:
[:, :, 1] =
  1.949979259990055
  0.3939816492611507
 -0.8464390217323449
  0.4555254821129745

[:, :, 2] =
  1.6893553574839384
  1.9573396471517739
  1.5358035472026144
 -1.2706780393752082

[:, :, 3] =
  0.999887609119746
  0.32959013947652727
  0.8756560406754215
 -1.0257977117576802

[:, :, 4] =
 -0.2252063989697573
 -0.5968450960471975
 -0.7319338928241739
  0.236534278792568

[:, :, 5] =
 -0.9523913128029378
  0.13537059021324083
  0.9514285829484852
  0.5464547535310538