gpt4 book ai didi

python - 沿数组对角线包裹/展开向量

转载 作者:太空狗 更新时间:2023-10-30 00:41:16 24 4
gpt4 key购买 nike

我一直在寻找一种方法(比只编写循环来遍历矩阵更有效)从以包装的对角线顺序给定的元素创建矩阵,并按此顺序提取值。例如,给定 a = [2,3,4,5,6,7],我希望能够生成数组

[  0,  2,  5,  7,
0, 0, 3, 6,
0, 0, 0, 4,
0, 0, 0, 0]

并且还能够从该数组中重新提取a

scipy.sparse.diags 实现了很多类似的东西,但顾名思义,它是为稀疏数组设计的。 numpy 中是否有任何类型的功能可以提供这种功能,或者某种形式的基于对角线的索引?或者也许某种类型的数组转换会使这更可行?

最佳答案

与 Josh Adel 提出的方法保持一致,如果你想让你的数据按对角线而不是行排序,你只需要稍微处理一下 np.triu_indices 的返回即可构建您自己的索引生成例程:

def my_triu_indices(n, k=0):
rows, cols = np.triu_indices(n, k)
rows = cols - rows - k
return rows, cols

现在您可以:

>>> a = np.array([2,3,4,5,6,7])
>>> b = np.zeros((4, 4), dtype=a.dtype)
>>> b[my_triu_indices(4, 1)] = a
>>> b
array([[0, 2, 5, 7],
[0, 0, 3, 6],
[0, 0, 0, 4],
[0, 0, 0, 0]])
>>> b[my_triu_indices(4, 1)]
array([2, 3, 4, 5, 6, 7])

关于python - 沿数组对角线包裹/展开向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15749325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com