将oneliner从Numpy Python转换为Julia,这涉及到将一个2D数组映射到另一个2D数组

2024-06-24 13:37:58 发布

您现在位置:Python中文网/ 问答频道 /正文

朱莉娅,我是初学者。我需要用几个矩阵做些杂耍。我的目标如下:

给定一个矩阵1,如下所示:

enter image description here

,以及二元矩阵矩阵2,如下所示:

enter image description here

,我想把元素从Matrix1分配到Matrix2,这样我就有了一个最终的矩阵Matrix3,它看起来像:

enter image description here

在Python中,以下一行程序起作用:

Matrix3= Matrix1.flatten()[(np.cumsum(Matrix2).reshape(Matrix2.shape)-1)] * Matrix2

有谁能帮我在Julia中编写类似的代码(如果可能,最好是一行代码)

分机-我从@cbk获得了上述问题的答案。作为上述问题的延伸。我想把它推广到高维矩阵。假设矩阵1有维数(4,6,6),二元矩阵矩阵2有维数(4,12,12)。分配问题依然存在。那你会怎么做呢?有人能帮我吗


Tags: 代码程序元素目标np矩阵shape初学者
1条回答
网友
1楼 · 发布于 2024-06-24 13:37:58

主要的“陷阱”是:(1)您想用适当类型的零填充Matrix3;(2)Julia是column major,所以您需要进行置换。不过,这应该可以做到:

(Matrix3 = zeros(eltype(Matrix1),size(Matrix2)))'[Matrix2'[:]] .= Matrix1'[:]

类似的选择将是

(Matrix3 = zeros(eltype(Matrix1),size(Matrix2)))'[vec(Matrix2')] .= vec(Matrix1')

但是,通过@btime测量,这比上述方法的效率稍低

编辑:如果Matrix2最初包含整数而不是布尔数,则需要在使用Matrix2索引之前进行转换,例如:

(Matrix3 = zeros(eltype(Matrix1),size(Matrix2)))'[Bool.(Matrix2'[:])] .= Matrix1'[:]

相关问题 更多 >