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