【问题标题】:Python - Mapping Strings onto A Boolean ArrayPython - 将字符串映射到布尔数组
【发布时间】:2017-07-31 20:32:09
【问题描述】:

我有一个像这样的布尔数组

bool_arr = [True, True, False]

我想将两个字符串映射到每个布尔值上

string_arr = ['r', 'r, 'k']

我将如何使用 numpy 进行映射?

【问题讨论】:

  • 那些是numpy 数组?
  • 是的,我刚刚向他们展示了这样的速记
  • “将两个字符串映射到每个布尔值”——不知道这是什么意思。将 True 映射到“r”,将 False 映射到“k”?

标签: python string numpy boolean mapping


【解决方案1】:
>>> bool_arr = [True, True, False]
>>> ['r' if x else 'k' for x in bool_arr]
['r', 'r', 'k']

【讨论】:

    【解决方案2】:

    使用索引的矢量化方法 -

    bool_arr = np.array([True, True, False]) # Input boolean array
    strings = np.array(['k','r']) # Input array of strings for mapping
    
    out = np.take(strings, bool_arr)
    out = np.take(strings, bool_arr.astype(int))
    out = strings[bool_arr.astype(int)]
    

    如果我们只需要在两个字符串之间进行选择,请使用 np.where -

    np.where(bool_arr, 'r','k')
    

    【讨论】:

      【解决方案3】:

      您可以使用numpy.vectorize 方法:

      import numpy as np
      
      x = np.array([True, True, False])
      mapping = ('k','r')
      result = np.vectorize(lambda i:mapping[i])(x)

      给出:

      >>> result
      array(['r', 'r', 'k'], 
            dtype='<U1')
      

      【讨论】:

        猜你喜欢
        • 2019-06-09
        • 2019-07-03
        • 2012-01-23
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        • 2014-11-27
        • 2011-01-18
        • 1970-01-01
        相关资源
        最近更新 更多