在我的问题中,我有一个包含n个元素的向量。给定窗口大小k我想要有效地创建包含带状对角线的矩阵大小n x 2k + 1。例如:
a = [a_1,a_2,a_3,a_4] ……
如果在你的手术中, k 和 n 是不变的,你可以用你的组合做你想做的事 mxnet.nd.gather_nd() 和 mx.nd.scatter_nd 。即使生成索引张量也同样效率低,因为您只需要执行一次,这不会有问题。你会想要使用 gather_nd 从原始数组中有效地“复制”您的数据,然后使用 scatter_nd 将它们分散到最终的矩阵形状。或者,您可以简单地连接一个 0 元素到您的输入数组(例如 [a_1, a_2, a_3] 会变成 [0, a_1, a_2, a_3] )然后只使用 mxnet.nd.gather_nd() 将元素复制到最终矩阵中。
k
n
mxnet.nd.gather_nd()
mx.nd.scatter_nd
gather_nd
scatter_nd
0
[a_1, a_2, a_3]
[0, a_1, a_2, a_3]