【问题标题】:Group 2D numpy array elements which have equal 1st column values将具有相等第一列值的 2D numpy 数组元素分组
【发布时间】:2017-02-04 04:44:45
【问题描述】:

我有一个像这样的二维 numpy 数组

[[ 569  897]
 [ 570  898]
 [ 570  900]
 [ 571  901]
 [ 571  905]
 [ 572  906]]

我希望按以下方式将第一列中具有相同值的元素组合在一起

[[  569  897]
 [[ 570  898]
  [ 570  900]]
 [[ 571  901]
  [ 571  905]]
 [  572  906] ]

我该怎么做?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您可以使用np.unique 获取分隔 索引,然后使用np.split 实际拆分-

    np.split(a, np.unique(a[:,0], return_index=1)[1][1:],axis=0)
    

    或者,使用切片和使用np.flatnonzero -

    np.split(a, np.flatnonzero(a[1:,0] != a[:-1,0])+1,axis=0)
    

    示例运行 -

    In [63]: a
    Out[63]: 
    array([[569, 897],
           [570, 898],
           [570, 900],
           [571, 901],
           [571, 905],
           [572, 906]])
    
    In [64]: out = np.split(a, np.flatnonzero(a[1:,0] != a[:-1,0])+1,axis=0)
    
    In [65]: out[0]
    Out[65]: array([[569, 897]])
    
    In [66]: out[1]
    Out[66]: 
    array([[570, 898],
           [570, 900]])
    
    In [67]: out[2]
    Out[67]: 
    array([[571, 901],
           [571, 905]])
    
    In [68]: out[3]
    Out[68]: array([[572, 906]])
    

    【讨论】:

    • 您能否为您提出的方法提供一个示例?它没有按我的意愿工作。
    • @hulkinBrain 好吧,我假设要对第一列进行排序,我是否正确假设?那么它应该可以工作,否则你能提供这样的样本吗?
    • 是的,第一列已排序。
    • @hulkinBrain 添加了一个。
    • @hulkinBrain Lexsort 它:a[np.lexsort(a.T)].
    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 2017-06-18
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多