Как получить доступ к атрибутам объекта в структуре массива - PullRequest
4 голосов
/ 16 августа 2011

С учетом структуры массива одинаковых (заданных пользователем) объектов, есть ли способ ссылаться на все из них одновременно?

например. учитывая структуру массива объектов типа date, есть ли способ взять среднее число лет, не прибегая к циклу for или к +1 к атрибуту year каждого объекта в массиве?

Пример кода следующий.

from numpy import *
from datetime import *

#this works
A = array([2012, 2011, 2009])
print average(A)

date1 = date(2012,06,30)
date2 = date(2011,06,30)
date3 = date(2010,06,30)
B = array([date1, date2, date3])
print B[0].year
print B[1].year
print B[2].year

#this doesn't
print average(B.year)

Ответы [ 2 ]

1 голос
/ 10 июня 2017

Это можно сделать с помощью функции векторизация .

import numpy as np
from datetime import date

date1 = date(2012,06,30)
date2 = date(2011,06,30)
date3 = date(2010,06,30)
B = np.array([date1, date2, date3])

yr = lambda x: x.year
vyr = np.vectorize(yr)
print vyr(B)
# array([2012, 2011, 2010])
print np.average(vyr(B))
# 2011.0

Примечание из руководства:

Функция векторизации предоставляется в первую очередь для удобства, а не для производительности. Реализация по сути является циклом for.

1 голос
/ 16 августа 2011

Думаю, вы можете сделать это следующим образом:

from numpy import array, average
from datetime import date

date1 = date(2012,06,30)
date2 = date(2011,06,30)
date3 = date(2010,06,30)
B = array([date1, date2, date3])

avYear = average([x.year for x in B])

отредактировано согласно комментарию:

B = array([x.replace(year=x.year+10) for x in B])

И обратите внимание, что использование из модуля import * не очень хорошо - всегда лучше импортировать только те классы и функции, которые вам действительно нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...