2015-11-02 10 views
3

У меня есть многоуровневый одномерный структурированный массив, и я хочу получить только часть одной записи. Я пытался выяснить, как разрезать этот тип запроса. Вот мой код:отрезать многозначный структурированный 1-й массив, чтобы получить часть записи

summary_stat_list = ['mean', 'variance', 'median', 'kurtosis', 'skewness'] 
model_summary_stats = np.zeros(5,dtype=[('statistic', 
                 'object'), 
              ('f1', 'float'), 
              ('f2', 'float'), 
              ('f3', 'float'), 
              ('m1', 'float'), 
              ('m2', 'float'), 
              ('m3', 'float'), 
              ('t3', 'float'), 
              ('t2', 'float'), 
              ('t1', 'float'), 
              ('prom1', 'float'), 
              ('prom2', 'float')]) 
for r in range(model_summary_stats.shape[0]): 
    model_summary_stats['statistic'][r] = summary_stat_list[r] 

Теперь массив выглядит следующим образом:

[('mean', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) 
('variance', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) 
('median', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) 
('kurtosis', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) 
('skewness', 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)] 

Мой вопрос, как я могу получить все, кроме первого элемента первого массива. То есть, в «среднем» массиве я хочу просто получить числовые записи.

Я пытался что-то вроде

model_summary_stats[0]['f1':] 

или:

model_summary_stats[0][1:] 

, но они не работают. Какие-либо предложения.

+0

'[i для i в model_summary_stats [0]] [1:]' – Donbeo

+0

Хм, я просто попробовал это, но это не сработало. Я положил 'i', где' 1' было не повезло. Я мог бы написать какой-то цикл, чтобы получить эти значения, но это не кажется очень питоническим. Должен быть более простой способ. – krishnab

ответ

4

Нарезка не работает с индексацией имени поля. Вы должны использовать список желаемых имен полей вместо:

model_summary_stats[0][['f1','f2','f3',etc] 

Вы также можете получить этот список с чем-то вроде

model_summary_stats.dtype.names[1:] 

Вы должны иметь в виду, что этот вид многопрофильной индексации развита слабо. Это нормально для получения значений, но вы не можете устанавливать значения таким образом. И вы не можете делать математику по столбцам.

http://docs.scipy.org/doc/numpy/user/basics.rec.html#accessing-multiple-fields-at-once

Другой DTYPE может быть более полезным

dt = np.dtype([('statistic',object),('values',(float,11))]) 
dt = np.dtype([('statistic',object),('values',(float,8)),('prom',(float,3))]) 

или что-либо группировка имеет наибольший смысл при обработке данных.