arrays - Julia:mapslices() 所映射的函数有多个输入参数?

标签 arrays multidimensional-array julia broadcast array-broadcasting

我正在尝试使用mapslices(也许这甚至不是正确的方法),使我能够跨多维数组的“切片”广播函数,其中函数涉及另一个数组,该数组对于广播的每次迭代始终相同。这可以通过 mapslicesmap 来完成吗?

这是一个特殊的问题:

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

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

广播/映射问题:我有一个更大的 3-D 数组 X_all ,其“切片”(例如,矩阵在第三维上堆叠,如 X[:,:,1] )是维度为 (D,N) 的输入数组 X 的示例,它们应该是 F(X,Y) 的输入。并且 Y 始终保持不变。

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

这不适用于广播(我收到的错误表明F(X,Y)正在输入标量 float ,而不是数组),所以我假设它需要使用mapslices来完成。唯一的问题是,我似乎找不到 mapslices 与多个输入参数一起使用的示例(例如 XY)——通常我只用一个输入参数看到它。

有什么想法吗?

最佳答案

您对问题的书面描述对我来说有点难以理解,但如果我正确理解问题,您只需将 mapslices 与匿名函数 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
#+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

关于arrays - Julia:mapslices() 所映射的函数有多个输入参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62901134/

相关文章:

Java Comparator 类对数组进行排序

Julia - 基于值数组过滤的最快方法?

gradient - 为什么我的梯度是错误的(Coursera、Logistic 回归、Julia)?

C++ SFML : How to successfully Iteratively render shapes?

c++ - 乘以存储在一维数组算法中的上三角矩阵

java - 具有数组类型的 getClass 方法 Java

sql - 如何拆分数组并将其存储到 Postgresql 数据库中的表的相关列中

java - 多维数组输出?

arrays - 在numpy中获取3D数组的2D切片的平均值

machine-learning - 对 julia 中的匿名函数感到困惑