numpy 数组问题请大神解答 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Porphet

numpy 数组问题请大神解答

  •  
  •   Porphet 2020 年 7 月 5 日 1243 次点击
    这是一个创建于 2119 天前的主题,其中的信息可能已经有所发展或是发生改变。
    a = [[1,2,3], [4,5,6], [7,8,9]] b = [1,2,3,4,5,6,7,8,9] c = [0,0,0,1,1,1,2,2,2] 

    b 是 a 的排序数组,c 是根据排序的结果找到该数在数组 a (第 0 维) 的下标。
    举例:“2”在 a 数组中 dim=0 的下标是 0

    现在我有 a,想得到 c,注意是对所有数进行排序

    有什么好的解决办法,谢谢大家了

    jiejiss
        1
    jiejiss  
       2020 年 7 月 5 日
    课后作业?建议先自己研究下
    volvo007
        2
    volvo007  
       2020 年 7 月 5 日
    比较笨的办法:

    a = np.random.randint(0, 10, (5, 5)) # 随机生成一个 5x5 的整数矩阵

    b = [(j, i//a0.shape[1]) for i,j in enumerate(a0.flatten())] # 拍扁之后生成列表,每个元素为 (数值,行数)

    c = [i[1] for i in sorted(b0, key=lambda x: x[0]]

    就是感觉数据量大的话,这么写会很慢……
    renmu123
        3
    renmu123  
       2020 年 7 月 5 日 via Android
    对 a 做个遍历将值和下标做成一个 dict,然后拍平后再对 b 做一个遍历处理,复杂度 O(n)
    Porphet
        4
    Porphet  
    OP
       2020 年 7 月 6 日
    @jiejiss 看着确实像,其实不是,我想问有没有快速现成的方法,比如通过矩阵相乘。

    @volvo007 我现在要处理的元素数量是 150 * 50000 个

    @renmu123 有没有通过调用 numpy 或者 pytorch 函数的方法
    Porphet
        5
    Porphet  
    OP
       2020 年 7 月 6 日
    @jiejiss @renmu123 @volvo007 谢谢大家已经解决了,昨天脑子比较混沌
    jiejiss
        6
    jiejiss  
       2020 年 7 月 6 日
    @Porphet #4 拿 C 写出来,编译成动态链接库然后让 Python 用 ctypes 之类的去调用吧……

    涉及到排序还有查下标,那 Python 再怎么优化也一定是比较慢的
    Porphet
        7
    Porphet  
    OP
       2020 年 7 月 6 日
    @jiejiss 这是极致的优化了,调用 numpy.argsort()得到排序后的下标,然后除一下 dim=1 的长度就可以了
    volvo007
        8
    volvo007  
       2020 年 7 月 6 日
    @Porphet 哦,明白你意思了。昨天也想到了这个函数,但是一时没想起来后面怎么处理
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2044 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 16:13 PVG 00:13 LAX 09:13 JFK 12:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86