我想用numpy.tril在上面对角线上提取嵌套列表的元素。根据我的理解,设置参数k>0,它会返回上面的对角线。但是,我的代码没有返回预期的结果。np.tril([[1,2,3],[4,5,6],[7,8,9]], 1)>>> array([[1, 2, 0], [4, 5, 6], [7, 8, 9]])预期输出:array([1,2,3],[4,5,0],[7,0,0,])
3 回答
小唯快跑啊
TA贡献1863条经验 获得超2个赞
您可以翻转数组,获取上三角形,然后将其翻转回来:
In [1]: import numpy as np
In [2]: a = np.array([[1,2,3],[4,5,6],[7,8,9]])
In [3]: np.triu(a[:, ::-1])[:, ::-1]
Out[3]:
array([[1, 2, 3],
[4, 5, 0],
[7, 0, 0]])
烙印99
TA贡献1829条经验 获得超13个赞
两个问题。首先,np.tril(如其名称所示)给出了下对角线。其次,三角形阵列通常是您所需输出的镜像。
我们可以在偷看源代码为np.triu适应其新triu_anti通过的功能np.fliplr:
def triu_anti(m, k=0):
m = np.asanyarray(m)
mask = np.fliplr(np.tri(*m.shape[-2:], k=k-1, dtype=bool))
return np.where(mask, np.zeros(1, m.dtype), m)
res = triu_anti([[1,2,3],[4,5,6],[7,8,9]])
print(res)
# array([[1, 2, 3],
# [4, 5, 0],
# [7, 0, 0]])
添加回答
举报
0/150
提交
取消