numpy:替换重组中的值

时间:2011-06-06 21:47:38

标签: python numpy recarray

我对numpy很新,我正在尝试替换重组中的值。所以我有这个数组:

import numpy as np
d = [('1', ''),('4', '5'),('7', '8')]
a = np.array(d, dtype=[('first', 'a5'), ('second', 'a5')])

我想做这样的事情:

ind = a=='' #Replace all blanks
a[ind] = '12345'

但这不能正常工作。我能够做到这一点:

col = a['second']
ind = col=='' #Replace all blanks
col[ind] = '54321'
a['second'] = col

哪个有效,但我宁愿有办法在整个重组中做到这一点。任何人都有更好的解决方案吗?

2 个答案:

答案 0 :(得分:5)

就我所知,numpy的“逐个元素”操作(你可以在没有循环的情况下一次对数组的所有元素执行某些功能)不能用于重组。您只能使用各列进行此操作。

如果你想使用重组,我认为最简单的解决方案是循环不同的列,虽然你想要另一个解决方案,但你可以像这样自动完成:

for fieldname in a.dtype.names:
    ind = a[fieldname] == ''
    a[fieldname][ind] = '54321'

但也许您应该考虑是否真的需要重新排列,而不能只使用普通的ndarray。当然,如果您只有一种数据类型(如示例所示),那么唯一的优势就是列名。

答案 1 :(得分:-1)

一种可能的解决方案:

a[np.where(a['second']=='')[0][0]]['second']='12345'