朱莉娅,我是初学者。我需要用几个矩阵做些杂耍。我的目标如下:
给定一个矩阵1,如下所示:
,以及二元矩阵矩阵2,如下所示:
,我想把元素从Matrix1分配到Matrix2,这样我就有了一个最终的矩阵Matrix3,它看起来像:
在Python中,以下一行程序起作用:
Matrix3= Matrix1.flatten()[(np.cumsum(Matrix2).reshape(Matrix2.shape)-1)] * Matrix2
有谁能帮我在Julia中编写类似的代码(如果可能,最好是一行代码)
分机-我从@cbk获得了上述问题的答案。作为上述问题的延伸。我想把它推广到高维矩阵。假设矩阵1有维数(4,6,6),二元矩阵矩阵2有维数(4,12,12)。分配问题依然存在。那你会怎么做呢?有人能帮我吗
主要的“陷阱”是:(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'[:]
相关问题 更多 >
编程相关推荐