【问题标题】:Grouping column indices of an array based on max value of another list in python根据python中另一个列表的最大值对数组的列索引进行分组
【发布时间】:2015-09-12 06:38:02
【问题描述】:

假设我有一个数组

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 的列索引进行分组的线索,如上所示。

【问题讨论】:

  • 我不太理解你的段落中的句子“所以保持索引号通用......”。 “在k 上再次计算”是什么意思?你如何得到你在那句话中描述的组?您能否说得更清楚一点,例如更详细地向我们描述我们将采取哪些步骤来获得这些组?
  • 通过说我想保持索引号通用,我的意思是我想保持列表 M 中更大元素的索引号通用并使用该索引,以非最大索引分组为如上所示。
  • 我正在尝试理解我提到的段落的含义以及您如何进行此分组。如果这意味着您还需要解释您是如何获得数组 m 的,那么当然可以。
  • 基于较低的近似值,我得到了 m。您将获得关于该主题的足够好的文献。
  • 你的问题有很多不相关的细节,但没有具体说明你真正想要什么。要求的答案是什么样的?你想要一个 6×2 数组的列表吗?如果是这样,它们应该按什么顺序排列?如果不是,答案的形式是什么?

标签: python arrays algorithm numpy scipy


【解决方案1】:

这有帮助吗?

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,不是吗?

【讨论】:

  • 非常感谢 :) 是的,我的错误。无论如何,这是一个错误,谢谢兄弟
【解决方案2】:

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

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]))

【讨论】:

    猜你喜欢
    • 2020-11-10
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多