嗨,我想用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,])
答案 0 :(得分:1)
您可以翻转数组,得到上部三角形,然后将其翻转回去:
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]])
答案 1 :(得分:1)
两个问题。首先, np.tril
(如其名称所示)给出一个下对角线。其次,三角形阵列通常是所需输出的镜像。
我们可以查看{strong> source code 的np.triu
,并通过np.fliplr
将其改编为新的triu_anti
功能:
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]])
答案 2 :(得分:0)
两次使用T
np.tril(a.T,0).T
array([[1, 2, 3],
[0, 5, 6],
[0, 0, 9]])