为了账号安全,请及时绑定邮箱和手机立即绑定

使用 numpy.tril 提取上方对角线上的列表元素

使用 numpy.tril 提取上方对角线上的列表元素

桃花长相依 2021-10-19 09:51:52
我想用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]])


查看完整回答
反对 回复 2021-10-19
?
烙印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]])


查看完整回答
反对 回复 2021-10-19
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

使用T两次


np.tril(a.T,0).T

array([[1, 2, 3],

       [0, 5, 6],

       [0, 0, 9]])


查看完整回答
反对 回复 2021-10-19
  • 3 回答
  • 0 关注
  • 232 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信