【问题标题】:Map a Numpy array into a list of characters将 Numpy 数组映射到字符列表
【发布时间】:2017-05-19 21:01:38
【问题描述】:

给定一个两个昏暗的 numpy 数组:

a =  array([[-1, -1],
       [-1,  1],
       [ 1,  1],
       [ 1,  1],
       [ 1,  0],
       [ 0, -1],
       [-1,  0],
       [ 0, -1],
       [-1,  0],
       [ 0,  1],
       [ 1,  1],
       [ 1,  1]])

还有一个转换字典:

d = {-1:'a', 0:'b', 1:'c'}

如何将原始数组映射成字符组合列表?

我需要的是以下列表(或数组)

out_put = ['aa', 'ac', 'cc', 'cc', 'cb', 'ba', ....]

(我正在做一些机器学习分类,我的类由 -1、0,1 的组合标记,我需要将“标签”数组转换为可读的东西,如“aa”、“bc”等开)。

如果sklearn包里面有一个简单的函数(binarizer,或者one-hot-encoding),可以把原来凹凸不平的数组转换成一组标签,那就完美了!

【问题讨论】:

    标签: python arrays scikit-learn sklearn-pandas


    【解决方案1】:

    这是列表理解的另一种方法:

    my_dict = {-1:'a', 0:'b', 1:'c'}
    out_put  = ["".join([my_dict[val] for val in row]) for row in a]
    

    【讨论】:

    • 另一个很棒的解决方案!谢谢!
    • 我喜欢你的解决方案,因为它可以推广到原始数组“a”中的任意数量的列
    【解决方案2】:

    我认为你应该能够通过列表理解来做到这一点

    # naming something `dict` is a bad idea
    d = {-1:'a', 0:'b', 1:'c'}
    out_put = ['%s%s' % (d[x], d[y]) for x, y in a]
    

    【讨论】:

    • 为了使其更通用,可能是这样的:["".join(d[c] for c in sub) for sub in a]
    • 太棒了!我确信使用 python 非常简单,但我不知道该怎么做。谢谢!
    • 您的解决方案当然是正确的,但不能推广到大小(数组“a”中的列数)。还是谢谢!
    【解决方案3】:

    我认为以下是非常可读的:

    def switch(row):
        dic = {
            -1:'a',
            0:'b',
            1:'c'
        }
        return dic.get(row)
    
    out_put = [switch(x)+switch(y) for x,y in a]
    

    【讨论】:

      猜你喜欢
      • 2016-08-09
      • 2012-01-23
      • 2016-03-05
      • 2013-09-21
      • 1970-01-01
      • 2021-11-15
      • 2018-08-31
      • 2018-08-06
      • 2021-09-12
      相关资源
      最近更新 更多