【发布时间】:2016-01-28 21:50:29
【问题描述】:
我想使用 Numpy 以有效的方式收集具有相同属性的对象。我不知道在使用一个structured array 或几个数组之间选择什么。
例如,让我们考虑一个对象 Item 及其属性 id(4 字节无符号整数)、name(20 个 unicode 字符)、price(4 字节浮点数)。
使用结构化数组:
import numpy as np
item_dtype = np.dtype([('id', 'u4'), ('name', 'U20'), ('price', 'f4')])
# Populate:
raw_items = [(12, 'Bike', 180.54), (33, 'Helmet', 46.99)]
my_items_a = np.array(raw_items, dtype=item_dtype)
# Access:
my_items_a[0] # first item
my_items_a['price'][1] # price of second item
为了方便,使用多个数组,封装在一个类中:
class Items:
def __init__(self, raw_items):
n = len(raw_items)
id, name, price = zip(*raw_items)
self.id = np.array(id, dtype='u4')
self.name = np.array(name, dtype='U20')
self.price = np.array(price, dtype='f4')
# Populate:
my_items_b = Items(raw_items)
# Access:
(my_items_b.id[0], my_items_b.name[0], my_items_b.price[0]) # first item
my_items_b.price[1] # price of second item
这两种方法的优缺点是什么?当使用一个而不是另一个?谢谢
【问题讨论】:
-
一些时间测试:stackoverflow.com/q/34933105