gpt4 book ai didi

python - NumPy "record array"或 "structured array"或 "recarray"

转载 作者:IT老高 更新时间:2023-10-28 21:12:55 28 4
gpt4 key购买 nike

NumPy“结构化数组”、“记录数组”和“recarray”之间有什么区别(如果有的话)?

NumPy docs暗示前两个是相同的:如果它们是,哪个是这个对象的首选术语?

相同的文档说(在页面底部):你可以找到更多关于recarrays和结构化数组的信息(包括两者的区别)here .对这种差异有简单的解释吗?

最佳答案

简而言之,你应该使用结构化数组而不是recarrays,因为结构化数组更快,recarrays 的唯一优点是允许你编写 arr.x 而不是 arr['x'],这可能是一个方便的快捷方式,但如果您的列名与 numpy 方法/属性冲突,也容易出错。

查看 excerpt从@jakevdp 的书中获得更详细的解释。他特别指出,简单地访问结构化数组的列可以比访问重新数组的列快 20 到 30 倍左右。但是,他的示例使用了一个只有 4 行的非常小的数据框,并且不执行任何标准操作。

对于较大数据帧的简单操作,尽管结构化数组仍然更快,但差异可能要小得多。例如,这是一个结构化的记录数组,每个数组有 10,000 行(代码从借用自 @jpp 答案 here 的数据帧创建数组)。

n = 10_000
df = pd.DataFrame({ 'x':np.random.randn(n) })
df['y'] = df.x.astype(int)

rec_array = df.to_records(index=False)

s = df.dtypes
struct_array = np.array([tuple(x) for x in df.values], dtype=list(zip(s.index, s)))

如果我们执行标准操作,例如将一列乘以 2,结构化数组的速度大约快 50%:

%timeit struct_array['x'] * 2
9.18 µs ± 88.9 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit rec_array.x * 2
14.2 µs ± 314 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

关于python - NumPy "record array"或 "structured array"或 "recarray",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27995110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com