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
这个方法有效,但我更希望能有一种方法可以在整个记录数组上进行操作。有没有人有更好的解决方案?
2 个回答
-1
一个可能的解决办法:
a[np.where(a['second']=='')[0][0]]['second']='12345'
5
我知道,numpy的“逐元素”操作(也就是可以对数组中的所有元素同时进行某个操作,而不需要用循环)在使用记录数组(recarrays)时是行不通的。你只能对单独的列进行操作。
如果你想使用记录数组,我觉得最简单的办法就是对不同的列进行循环,虽然你可能想要其他的解决方案,但这样做其实也挺自动化的:
for fieldname in a.dtype.names:
ind = a[fieldname] == ''
a[fieldname][ind] = '54321'
不过,也许你应该考虑一下,自己是否真的需要记录数组,或者说不如直接用普通的ndarray。如果你的数据类型只有一种(就像例子中那样),那么记录数组唯一的好处就是可以有列名。