删除相关表中所有重复的最大数字

时间:2017-11-17 00:42:04

标签: python csv file-io

我需要代码来获取相关表的.csv,表的样本在这里发布:

     AA bb  cc  dd  ff
AA  100 87  71  71  78
bb  87  100 73  74  81
cc  71  73  100 96  69
dd  71  74  96  100 71
ee  78  81  69  100 100
ff  72  73  68  68  71
Pg  68  69  62  62  64
Ph  68  69  69  62  64
Pi  68  69  62  62  64
Pj  68  69  63  63  64
Pk  70  71  65  65  67

我目前已经阅读了.csv文件和python的.csv模块作为列表列表。然后我删除了第一列和第一行。我现在正在尝试获取这些int值并找到每行的最大值。如果一行中有多个最大值,我也想要这些值。

然后我打算将该输出放入表格

file1values col row %
group1      AA   AA 100
...
group1      dd   ee 100
group1      ff   ee 100

到目前为止,我遇到的问题是获取每一行的最大值。另外我想我会对如何获取每个最大值的地址(col和row)感到困惑。

到目前为止,这是代码:

from io import StringIO
import csv
import numpy as np


with open('/home/group1.csv', newline='') as csvfile:
    reader = csv.reader(csvfile)
    data_as_list = list(reader)

    a = np.array(data_as_list)

    a = np.delete(a, (0), axis=0)

    a = np.delete(a, (0), axis=1)

    np.set_printoptions(threshold=np.nan)
    print (a)
    print ('')

    count = 0
    b = (a.astype(int))

    maxArr = []
    while (count < b.shape[0]):
        print (b[count])
        count = count + 1
        maxArr.append(max(b[count - 1]))
    print (maxArr)

1 个答案:

答案 0 :(得分:0)

有更简单的方法......

为测试创建一个随机矩阵

> import numpy as np
> m=np.random.randint(100,size=(10,10))

将对角线设置为零(或设置为超出范围的负数)

> np.fill_diagonal(m,0)

array([[ 0, 35, 52, 40, 54,  1, 20, 41, 62, 92],
       [45,  0, 75, 71, 85, 86, 83, 39, 52, 69],
       [29, 21,  0, 78, 32, 14, 13, 27, 31, 26],
       [99, 90, 16,  0, 28, 36, 30, 45, 85, 41],
       [29, 21, 48, 31,  0, 86, 18,  7, 70, 76],
       [96, 97, 34, 82, 51,  0, 69, 22, 27, 85],
       [71, 58, 98, 42,  3, 51,  0, 19, 41, 93],
       [54, 97, 86, 75, 62, 91, 78,  0, 55, 89],
       [87, 44, 44, 54, 94, 94, 57, 24,  0, 81],
       [94, 32,  1, 92, 34, 46, 96, 38, 75,  0]])

找到每列/行的最大值(因为你的矩阵是对称的并不重要)

> cm=np.argmax(m,1)

array([9, 5, 3, 0, 5, 1, 2, 1, 4, 6])

您需要将行/列索引映射到标签。

> for r in range(10): 
      print(r,cm[r],m[r,cm[r]])

0 9 92
1 5 86
2 3 78
3 0 99
4 5 86
5 1 97
6 2 98
7 1 97
8 4 94
9 6 96