python - 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
解决方案
您可以使用np.vectorize
, 将函数映射到数组中的每个元素。对于这种情况,您可以定义一个自定义lambda
函数来提取每个条目的月份lambda x: x.month
:
np.vectorize(lambda x: x.month)(a)
array([1, 1, 1])
推荐阅读
- java - 如何在 UML 类图中阅读这种交叉关联?
- visual-studio-code - VSCode:如何使“打开文件”始终从特定目录开始?
- javascript - 为什么这个简单的数据初始化函数在这个 vue 组件中不起作用?
- python - 从字符串中删除字符,直到达到特定格式
- node.js - 使用 socket.io 时 heroku 应用程序崩溃
- pandas - 使用 pandas 创建多索引列的简单方法
- java - Kafka 序列化程序中的“configs”参数是什么
界面? - python - 为什么我的精度在数组和列表之间会发生变化?
- postgresql - 使用 balena 在 pi 4 上运行 postgres
- python - Sqlite3 Transactions:一次只能执行一条语句