我想用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
提交
取消