如何在numpy数组结构中访问对象属性
假设你有一个numpy数组,里面装的是一堆相同类型的对象(这些对象是你自己指定的),有没有办法一次性引用它们呢?
比如说,如果这个numpy数组里放的是日期类型的对象,有没有办法在不使用循环的情况下,直接计算这些日期的年份的平均值,而不是一个一个地把年份加1?
下面是一个示例代码。
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
这可以通过 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
手册中的说明:
vectorize 函数主要是为了方便使用,而不是为了提高性能。它的实现基本上就是一个 for 循环。
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 *”这种写法并不好,最好只导入你真正需要的类和函数。