小编MRi*_*cci的帖子

PyTorch 的 torch.as_strided 具有负步长,用于制作托普利茨矩阵

我正在编写临时的 PyTorch 版本scipy.linalg.toeplitz,目前具有以下形式:

def toeplitz_torch(c, r=None):
    c = torch.tensor(c).ravel()
    if r is None:
        r = torch.conj(c)
    else:
        r = torch.tensor(r).ravel()

    # Flip c left to right.
    idx = [i for i in range(c.size(0)-1, -1, -1)]
    idx = torch.LongTensor(idx)
    c = c.index_select(0, idx)

    vals = torch.cat((c, r[1:]))
    out_shp = len(c), len(r)
    n = vals.stride(0)

    return torch.as_strided(vals[len(c)-1:], size=out_shp, stride=(-n, n)).copy()
Run Code Online (Sandbox Code Playgroud)

torch.as_strided目前不支持负步幅。因此,我的函数抛出错误:

RuntimeError : as_strided: 目前不支持负步幅,得到步幅: [-1, 1]

我(可能不正确)的理解as_strided是,它将第一个参数的值插入到一个新数组中,该数组的大小由第二个参数指定,并且它是通过在原始数组中线性索引这些值并将它们放置在下标索引的步幅中来实现的由最后一个参数给出。

NumPy 和 PyTorch 文档都有关于as_strided“极度小心”使用该函数的可怕警告,我不完全理解这个函数,所以我想问: …

python numpy scipy stride pytorch

1
推荐指数
1
解决办法
1263
查看次数

标签 统计

numpy ×1

python ×1

pytorch ×1

scipy ×1

stride ×1