Python 是否将多个记录重新分配给记录数组?

Python 是否将多个记录重新分配给记录数组?,python,numpy,Python,Numpy,我想对记录数组的某些列应用转换,并重新分配这些值。这样做的标准方法是什么 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) TypeEr

我想对记录数组的某些列应用转换,并重新分配这些值。这样做的标准方法是什么

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

为什么不一个一个地缩放变量呢

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

蟒蛇的好绰号:-)谢谢!是的,刺拳是针对蟒蛇的……;)对,所以这就是必须要做的。。。用线圈?这是显而易见的方法,但我认为
numpy
的级别足够高,可以让我避免这种构造(否则它在
fortran
/
C
?)上没有太大价值)。好吧,使用
numpy.ndarray
提供了足够高的级别,可以同时击败
fortran
C
。但是,好吧,
numpy.recarray
是由几个数组组成的结构。可以将多个数组视为一个数组,但不能同时使用多个数组,尤其是不能将数组序列分配给一个数组。Python的禅宗也教导我们显式优于隐式,还有什么比循环更显式呢来自R,我讨厌循环,但知道一个重新排列是由几个重新排列组成的,这有助于我接受在这种情况下循环是不可避免的。