【发布时间】:2021-03-23 21:54:33
【问题描述】:
我想有效地制作一个移动窗口为 1 的矩阵的 Torch 张量或 numpy 数组。
例如,下面的矩阵将是一个窗口=3。 对角元素右侧有 3 个 1,左侧有 3 个 1,但它不像循环矩阵那样环绕,所以第 1 行只有 4 个 1。
有没有人有什么想法,这个是用来当面具的。
【问题讨论】:
标签: python numpy pytorch sparse-matrix
我想有效地制作一个移动窗口为 1 的矩阵的 Torch 张量或 numpy 数组。
例如,下面的矩阵将是一个窗口=3。 对角元素右侧有 3 个 1,左侧有 3 个 1,但它不像循环矩阵那样环绕,所以第 1 行只有 4 个 1。
有没有人有什么想法,这个是用来当面具的。
【问题讨论】:
标签: python numpy pytorch sparse-matrix
Pytorch 提供了tensor.diagonal 方法,让您可以访问张量的任何对角线。要为张量的结果视图分配一个值,您可以使用tensor.copy_。这会给你类似的东西:
def circulant(n, window):
circulant_t = torch.zeros(n,n)
# [0, 1, 2, ..., window, -1, -2, ..., window]
offsets = [0] + [i for i in range(window)] + [-i for i in range(window)]
for offset in offsets:
#size of the 1-tensor depends on the length of the diagonal
circulant_t.diagonal(offset=offset).copy_(torch.ones(n-abs(offset)))
return circulant_t
【讨论】: