首页 > 解决方案 > numpy数组中元素的访问属性

问题描述

我有一个充满类对象(dtype = object)的numpy数组cftime

In [1]: a
Out[1]: 
array([cftime.DatetimeNoLeap(2000, 1, 1, 11, 29, 59, 999996, 5, 1),
       cftime.DatetimeNoLeap(2000, 1, 2, 11, 29, 59, 999996, 6, 2),
       cftime.DatetimeNoLeap(2000, 1, 3, 11, 29, 59, 999996, 0, 3)],
      dtype=object)

In [2]: type(a[0])
Out[2]: cftime._cftime.DatetimeNoLeap

这些对象中的每一个都有一个属性month

a[0].month
Out[66]: 1

我想获得一个具有相同形状的新 numpy 数组,但为原始数组的每个元素填充此属性。类似的东西b=a.month。但显然这失败了,a没有month属性的 numpy 数组也是如此。我怎样才能达到这个结果?

PS:当然我可以用一个普通的 Python 循环来做到这一点,但我想遵循一个完全 numpy 的方法:

b=np.zeros_like(a, dtype=int)
for i in range(a.size):
    b[i] = a[i].month

标签: pythonnumpy

解决方案


您可以使用np.vectorize, 将函数映射到数组中的每个元素。对于这种情况,您可以定义一个自定义lambda函数来提取每个条目的月份lambda x: x.month

np.vectorize(lambda x: x.month)(a)
array([1, 1, 1])

推荐阅读