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

6 投票
2 回答
2914 浏览
提问于 2025-04-16 23:41

假设你有一个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 *”这种写法并不好,最好只导入你真正需要的类和函数。

撰写回答