今天想把课题的(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) # 取下三角函数