清理和串联包含带有 numpy 的特殊字符的字符串的 2D 屏蔽数组



读取一个netCDF文件,其中一个变量是一个2D字符串数组,如下所示:

[[' ' ' ' ' ' 'B' 'l' 'i' ' ' ' ']
 ['+' -- 'xaa' -- 'F' 'o' 'o' ' ']
 [' ' '1' ']' -- 'B' 'l' 'a' ' ']
 [' ' 'x1a' -- 'x98' -- 'B' 'l' 'o']]

我想要的输出:

['Bli', 'Foo', 'Bla', 'Blo']

或包含这些单词的数组,或任何带有干净单词的可迭代数组(即,删除空格、特殊字符等(。

我的烦恼:

我的困难来自特殊字符(它们来自哪里以及如何删除它们?(,以及被屏蔽的值:

import numpy as np
a = np.ma.masked_array([(' ', ' ', ' ', 'B', 'l', 'i', ' ', ' ' ),
                        ('+', ' ', 'xaa', ' ', 'F', 'o', 'o', ' '),
                        (' ', '1', ']', ' ', 'B', 'l', 'a', ' '),
                        (' ', 'x1a', ' ', 'x98', ' ', 'B', 'l', 'o' )],
                       mask=[(0, 0, 0, 0, 0, 0, 0, 0),
                             (0, 1, 0, 1, 0, 0, 0, 0),
                             (0, 0, 0, 1, 0, 0, 0, 0),
                             (0, 0, 1, 0, 1, 0, 0, 0)])
print a
print ''.join(a[0,:]).replace(' ', '')  # this properly produces 'Bli'
print [''.join(i).replace(' ', '') for i in a]

最后一行产生以下错误:

类型错误:序列项 1:预期字符串,找到屏蔽常量

但即使解决了这个问题,我最终也会在我的字符串中出现那些不受欢迎的奇怪字符......

a[a.mask] = ' '
print [''.join(i).replace(' ', '') for i in a]
# ['Bli', '+xaaFoo', '1]Bla', 'x1ax98Blo']

在单个操作中均匀处理此阵列的最佳方法是什么?

你能用这个吗?

    import numpy as np
    a = np.ma.masked_array([(' ', ' ', ' ', 'B', 'l', 'i', ' ', ' ' ),
                            ('+', ' ', 'xaa', ' ', 'F', 'o', 'o', ' '),
                            (' ', '1', ']', ' ', 'B', 'l', 'a', ' '),
                            (' ', 'x1a', ' ', 'x98', ' ', 'B', 'l', 'o' )],
                           mask=[(0, 0, 0, 0, 0, 0, 0, 0),
                                 (0, 1, 0, 1, 0, 0, 0, 0),
                                 (0, 0, 0, 1, 0, 0, 0, 0),
                                 (0, 0, 1, 0, 1, 0, 0, 0)])
    print ''.join(a[0,:]).replace(' ', '')  # this properly produces 'Bli'
    print [''.join(x for x in y if x.isalpha()) for y in [''.join(i).replace(' ', '') for i in a.filled('')]]

最新更新