代码之家  ›  专栏  ›  技术社区  ›  Imtinan Azhar

在替换numpy数组中的值时防止字符串被截断

  •  0
  • Imtinan Azhar  · 技术社区  · 6 年前

    假设我有数组 a b

    a = np.array([1,2,3])
    b = np.array(['red','red','red'])
    

    b[a<3]="blue"
    

    我得到的结果是

    array(['blu', 'blu', 'red'], dtype='<U3')
    

    目前我正在做

    b = np.array([" "*100 for i in range(3)])
    b[a>2] = "red"
    b[a<3] = "blue"
    

    但这只是一个解决办法,这是我代码中的错误吗?或者是numpy有什么问题,我该怎么解决?

    3 回复  |  直到 6 年前
        1
  •  5
  •   Matt Messersmith    6 年前

    通过设置 dtype 属于 b "object"

    import numpy as np
    a = np.array([1,2,3])
    b = np.array(['red','red','red'], dtype="object")
    
    b[a<3] = "blue"
    
    print(b)
    

    这将输出:

    ['blue' 'blue' 'red']
    

    数据类型 将处理字符串或其他常规Python对象。这也必然意味着在引擎盖下你会有一个 numpy

        2
  •  3
  •   roganjosh    6 年前

    import numpy as np
    
    a = np.array([1,2,3])
    b = np.array(['red','red','red'])
    
    replacement = "blue"
    b = b.astype('<U{}'.format(max(len(replacement), a.dtype.itemsize)))
    b[a<3] = replacement
    print(b)
    

    replacement 比数组中所有现有字符串都长。

        3
  •  2
  •   willeM_ Van Onsem    6 年前

    如果构造这样的数组,则类型如下所示:

    >>> b
    array(['red', 'red', 'red'], dtype='<U3')

    这意味着字符串的长度最多为3个字符。如果指定较长的字符串,则这些字符串 截断的 .

    您可以更改数据类型以使最大长度更长,例如:

    b2 = b.astype('<U10')