Переназначить несколько записей в массив записей? - PullRequest
0 голосов
/ 11 ноября 2011

Я хочу применить преобразование к определенным столбцам массива записей и переназначить эти значения.Какой канонический способ сделать это?

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 голос
/ 11 ноября 2011

Почему бы вам не масштабировать переменные одну за другой?

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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...