numpy:替换recarray中的值

问题描述

| 我是numpy的新手,并且我正在尝试替换Recarray中的值。所以我有这个数组:
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
哪个可行,但我宁愿有办法在整个Recarray上做到这一点。有人有更好的解决方案吗?     

解决方法

        据我所知,numpy的“逐个元素”操作(使用其中,您可以在不循环的情况下一次对数组的所有元素执行某些功能)对Recarrays不起作用。您只能使用单个列来执行此操作。 如果您想使用recarrays,我认为最简单的解决方案是循环不同的列,尽管您想要另一个解决方案,但是您可以像这样自动完成:
for fieldname in a.dtype.names:
    ind = a[fieldname] == \'\'
    a[fieldname][ind] = \'54321\'
但是也许您应该考虑是否真的需要Recarray,而不能仅仅使用普通的ndarray。当然,如果您只有一种数据类型(如示例中所示),那么唯一的好处就是列名。     ,        一种可能的解决方案:
a[np.where(a[\'second\']==\'\')[0][0]][\'second\']=\'12345\'