加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Numpy对象属性数组

发布时间:2020-12-20 13:36:57 所属栏目:Python 来源:网络整理
导读:参见英文答案 Getting attributes from arrays of objects in NumPy????????????????????????????????????2个 我有一个多维的对象数组,如: a = np.array([obj1,obj2,obj3]) 对象是具有多个属性的类的实例.让我们说其中一个是高度,其中一个是长度.为了获得相
参见英文答案 > Getting attributes from arrays of objects in NumPy????????????????????????????????????2个
我有一个多维的对象数组,如:

a = np.array([obj1,obj2,obj3])

对象是具有多个属性的类的实例.让我们说其中一个是高度,其中一个是长度.为了获得相应的多维长度和高度数组,我做了:

lengths = np.array([obj1.length,obj2.length,obj3.length])

 heights = np.array([obj1.height,obj2.height,obj3.height])

这开始使我的代码混乱很多.有更有效的方法吗?例如,我有类似的东西

heights = a.height

记住,但显然它不起作用,因为a是我的对象的数组而不是我的对象.但有什么类似我可以做的有效和pythonic?我试过类似的东西

for x in np.nditer(a,flags=['refs_ok']):
    print x.length

看看会发生什么,但它不起作用,因为nditer以某种方式返回一个元组.

有任何想法吗?

解决方法

你可以 vectorize功能:

>>> import numpy
>>> 
>>> class Obj(object):
...     def __init__(self,x,y):
...         self.x = x
...         self.y = y
... 
>>> arr = numpy.array([Obj(1,2),Obj(3,4),Obj(5,6)])
>>> 
>>> vectorized_x = numpy.vectorize(lambda obj: obj.x)
>>> 
>>> vectorized_x(arr)
array([1,3,5])

虽然我不确定你是否应该首先存储一个NumPy Python对象数组. Vectorize并不比Python循环更有效.存储(n 1)-D阵列会更有效,因为我们可以简单地通过切片来提取内容,这是一种本机操作,例如,

>>> a = numpy.array([[(1,(3,(5,6)],[(7,8),(9,10),(11,12)],[(-13,-14),(-15,-16),(-17,-18)]])
>>> a[:,:,0]
array([[  1,5],[  7,9,11],[-13,-15,-17]])
>>> a[:,1]
array([[  2,4,6],[  8,10,12],[-14,-16,-18]])

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读