根据 python 中另一个列表的最大值对数组的列索引进行分组

Grouping column indices of an array based on max value of another list in python

假设我有一个数组

k= array([[1, 2, 3, 4, 5],
          [5, 6, 7, 8, 9],
          [2, 5, 4, 7, 3],
          [4, 7, 6, 8, 2],
          [1, 2, 4, 3, 6],
          [7, 8, 9, 5, 4]])

假设在对数组中的每一列进行计算后,我分别得到 array([0.6,0.4,0.75,0.2,0.75]),这样:

column1 的计算即 array([1,5,2,4,1,7]) 的计算结果为 0.6, column2 的计算即 array([2,6,5,7,2,8]) 的计算结果为 0.4, column3 的计算即 array([3,7,4,6,4,9]) 的计算结果为 0.75,依此类推。

设计算列表为m。这样

m=array([0.6,0.4,0.75,0.2,0.75])

到目前为止,我已经计算了数组 k 中的单个列。现在我想根据列表 m 中最大的浮点元素对列表 m 中的元素进行分组,然后在 k 上再次计算。例如:

m[2]=m[4]=0.75(数组中最大的数字),这意味着数组 k 中列的索引 2 和索引 4 是最大的。因此,保持该索引号通用我想对 k[:,2] with k[:,0],k[:,2] with k[:,1],k[:,2] with k[:,3] and similarly k[:,4] with k[:,0],k[:,4] with k[:,1],k[:,4] with k[:,3] 进行分组并在 k

上再次计算

这样分组 k[:,2] with k[:,0] 意味着:

k0_2=array([[1,3],          k1_2=array([[2,3],          k3_2=array([[4,3],
            [5,7],                      [6,7],                      [8,7],
            [2,4],                      [5,4],                      [7,4],
            [4,6],                      [7,6],                      [8,6],
            [1,4],                      [2,4],                      [3,4],  
            [7,9]])                     [8,9]])                     [5,9]])

k0_4=array([[1,5],          k1_4=array([[2,5],          k3_4=array([[4,5],
            [5,9],                      [6,9],                      [8,9],
            [2,9],                      [5,3],                      [7,3],
            [4,2],                      [7,2],                      [8,2],
            [1,6],                      [2,6],                      [3,6],  
            [7,4]])                     [8,4]])                     [5,4]])

谁能给我任何关于根据 list m 的最大值对 array k 的列索引进行分组的线索,如上所示。

这有帮助吗?

import numpy as np

k= np.array(
    [[1, 2, 3, 4, 5],
     [5, 6, 7, 8, 9],
     [2, 5, 4, 7, 3],
     [4, 7, 6, 8, 2],
     [1, 2, 4, 3, 6],
     [7, 8, 9, 5, 4]])

cols=[2,4]
others = [c for c in range(k.shape[1]) if c not in cols]
groups = [k[:,[o, c]] for c in cols for o in others]
for g in groups:
    print(g)
    print('')

这给了我

[[1 3]
 [5 7]
 [2 4]
 [4 6]
 [1 4]
 [7 9]]

[[2 3]
 [6 7]
 [5 4]
 [7 6]
 [2 4]
 [8 9]]

[[4 3]
 [8 7]
 [7 4]
 [8 6]
 [3 4]
 [5 9]]

[[1 5]
 [5 9]
 [2 3]
 [4 2]
 [1 6]
 [7 4]]

[[2 5]
 [6 9]
 [5 3]
 [7 2]
 [2 6]
 [8 4]]

[[4 5]
 [8 9]
 [7 3]
 [8 2]
 [3 6]
 [5 4]]

我认为您的 k_04 数组中存在印刷错误。我觉得k_04[2,10应该是3,不是9,是吧?

这是我和我的一个朋友想出的另一个解决方案:

import numpy as np

k= np.array(
    [[1, 2, 3, 4, 5],
     [5, 6, 7, 8, 9],
     [2, 5, 4, 7, 3],
     [4, 7, 6, 8, 2],
     [1, 2, 4, 3, 6],
     [7, 8, 9, 5, 4]])

cols=[2,4]
kl = np.delete(k, np.s_[cols],1)

 for i in range(len(cols)):
     for j in range(len(kl[0])):
          print np.column_stack((k[:,cols[i]],kl[:,j]))