附加到numpy数组的最佳方法

 四只猪1984 发布于 2022-12-23 16:42

我有一个numpy数组,我可以使用append简单地追加一个项目,如下所示:

numpy.append(myarray, 1)

在这种情况下,我只是附加了整数1.

但这是附加到阵列的最快方法吗?我有一个非常长的阵列,成千上万.

或者更好的索引数组并直接分配它?像这样:

myarray[123] = 1

Roger Fan.. 14

附加到numpy数组是非常低效的.这是因为解释器需要在每一步都找到并为整个数组分配内存.根据应用程序,有更好的策略.

如果你事先知道的长度,最好是预先分配使用的功能,如阵列np.ones,np.zerosnp.empty.

desired_length = 500
results = np.empty(desired_length)
for i in range(desired_length):
    results[i] = i**2

如果您不知道长度,那么将结果保存在常规列表中并将其转换为数组可能会更有效.

results = []
while condition:
    a = do_stuff()
    results.append(a)
results = np.array(results)

这是我电脑上的一些时间.

def pre_allocate():
    results = np.empty(5000)
    for i in range(5000):
        results[i] = i**2
    return results

def list_append():
    results = []
    for i in range(5000):
        results.append(i**2)
    return np.array(results)

def numpy_append():
    results = np.array([])
    for i in range(5000):
        np.append(results, i**2)
    return results

%timeit pre_allocate()
# 100 loops, best of 3: 2.42 ms per loop

%timeit list_append()
# 100 loops, best of 3: 2.5 ms per loop

%timeit numpy_append()
# 10 loops, best of 3: 48.4 ms per loop

因此,您可以看到预分配和使用列表然后转换都要快得多.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有