numpy - 漂亮的印花

时间:2011-02-27 18:13:50

标签: python numpy

我有一个numpy字符串数组。如果未定义数组中的值,则按预期打印None。是否可以为None值提供默认值?

e.g。在下面我想要“_”而不是无

[[None B C]
 [M None O]
 [X Y None]]

会变成

[[_ B C]
 [M _ O]
 [X Y _]]

3 个答案:

答案 0 :(得分:7)

您也可以考虑使用蒙面数组:

import numpy as np

x=np.array([[None, 'B', 'C'],
          ['M', None, 'O'],
          ['X', 'Y', None]])
print(x)
# [[None B C]
#  [M None O]
#  [X Y None]]

x=np.ma.masked_equal(x,None)
print(x)
# [[-- B C]
#  [M -- O]
#  [X Y --]]

答案 1 :(得分:3)

Numpy能够根据测试条件创建布尔数组,然后使用带括号表示法的布尔数组来更改选定的值。对于字符串数组foo

is_none = (foo == None)
foo[ is_none ] = "_"

(是的,我知道通常你在与is比较时应该使用None,但是因为你知道你的输入是一个字符串,我不认为Numpy提供了一个矢量化的{{1}声明,is就好了。)

答案 2 :(得分:0)

一个简单的解决方案可能是先将数组转换为字符串然后替换字符串None,例如,如果矩阵为a

print(str(a).replace('None','_'))

你也可以定义一个函数:

def printarray(a): 
    print(str(a).replace('None','_'))