给定相同(用户指定)对象的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)
答案 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循环。