numpy 返回上三角矩阵但不包括对角元素

今天想把课题的(700,700)的标签矩阵取上三角元素但不包含对角元素,如下图所示,左边方框里的内容为下标,右边的是想将左边的元素存入右边一列。

然后我就尝试将二维数组的下标与一维数组的下标一一映射,奈何我表示不出来呀。

想了好久,最后还是放弃了用i,j表示一维数组的索引,另辟蹊径,重新定一个变量保存一维数组的索引。于是就成功的解决了将上三角元素不包含对角元素存入一维数组里。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/11/22 14:30
# @Author  : Qiufen.Chen
# @Email   : 1760812842@qq.com
# @File    : triu.py
# @Software: PyCharm


"""numpy 保存上三角矩阵不包括对角元素"""


import numpy as np
import os


path = '/home/cqfnenu/LSTM/data/700/lable_data/'
save_path = '/home/cqfnenu/LSTM/data/700/new_lable_data'

path_list=os.listdir(path)
path_list.sort()  # 排序

for file_name in path_list:
    lable = np.load(os.path.join(path, file_name))
    new_array = np.zeros((244650,1))  # 共244650行 每行1列 初值为0

    v = 0
    for a in range(lable.shape[0]):
        for b in range(lable.shape[1]):
            if b>a:
                new_array[v] = lable[a][b]
                v += 1
    print(new_array[:100]) # 查看前100个元素

    result = new_array.reshape((350,699))
    np.save(save_path + '/' + str((file_name).split('.')[0]), result)

--------------------------------------------------------------------------------------------------------------------------------------------

注:由于我的lable矩阵的shape是(700,700),取对角线上以上的元素总共有:700*(700-1)/2 = 244650

思路:①先定义一个(244650,1)大小的零矩阵

           ②再将所需要的元素存入该零矩阵中;

           ③最后reshape成(350,699),保存文件。

--------------------------------------------------------------------------------------------------------------------------------------------

如果是numpy直接获取上三角元素的话,可以用下面的代码实现:

lable = np.load(os.path.join(path, file_name))
triu_array = np.triu(lable)  # 取上三角函数

tril_array = np.tril(lable)  # 取下三角函数

参考:(1)numpy.triu — NumPy v1.19 Manual

           (2)numpy.tril — NumPy v1.19 Manual

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值