如何将多个记录重新分配到记录数组?
我想对记录数组中的某些列进行变换,然后把这些值重新赋值回去。请问有什么标准的方法可以做到这一点?
List = [['a',.3,.3],
['b',-.5,.4]]
Arr = np.rec.fromrecords(List,names=['id','var1','var2'])
我还想对一些变量进行缩放。这里给个例子,但实际上缩放的过程可能比简单地减去平均值要复杂。
scale = lambda x: x - x.mean(0)
这样做是不行的。
Arr[['var1','var2']].mean(0)
TypeError: cannot perform reduce with flexible type
所以我得先把它转换成一个非结构化的数组,但接下来怎么再把它赋值回记录数组呢?我需要用循环吗?
Unstr = Arr[['var1','var2']].view('float').reshape(len(Arr),-1)
Arr[['var1','var2']] = scale(Unstr)
IndexError: unsupported iterator index
1 个回答
1
为什么不一个一个地缩放变量呢?
In [13]: %paste
import numpy as np
List = [['a',.3,.3],
['b',-.5,.4]]
scale = lambda x: x - x.mean()
Arr = np.rec.fromrecords(List,names=['id','var1','var2'])
vars_to_scale = ['var1', 'var2']
for var in vars_to_scale:
Arr[var] = scale(Arr[var])
print Arr
## -- End pasted text --
[('a', 0.4, -0.04999999999999999) ('b', -0.4, 0.050000000000000044)]