如何在numpy数组结构中访问Object属性

时间:2011-08-16 12:32:54

标签: python numpy

给定相同(用户指定)对象的numpy数组结构,有没有办法一次引用所有这些对象?

E.g。给定一个类型为date的对象的numpy数组结构,有没有办法在不使用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 个答案:

答案 0 :(得分:1)

认为您可以通过以下方式执行此操作:

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

请注意,使用from module import *不是很好 - 最好只导入你真正需要的类和函数。

答案 1 :(得分:1)

这可以通过vectorize函数完成。

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循环。