如何将多个记录重新分配到记录数组?

0 投票
1 回答
750 浏览
提问于 2025-04-17 06:05

我想对记录数组中的某些列进行变换,然后把这些值重新赋值回去。请问有什么标准的方法可以做到这一点?

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)]

撰写回答