如果我尝试
x = np.append(x, (2,3))
元组(2,3)
不会附加到数组的末尾,而是2
and 3
单独附加,即使我最初声明x
as
x = np.array([], dtype = tuple)
or
x = np.array([], dtype = (int,2))
执行此操作的正确方法是什么?
我同意@user2357112的评论:
附加到 NumPy 数组比附加到普通列表要慢得多。他们根本不是为这种操作而设计的
这是一个小基准:
# measure execution time
import timeit
import numpy as np
def f1(num_iterations):
x = np.dtype((np.int32, (2, 1)))
for i in range(num_iterations):
x = np.append(x, (i, i))
def f2(num_iterations):
x = np.array([(0, 0)])
for i in range(num_iterations):
x = np.vstack((x, (i, i)))
def f3(num_iterations):
x = []
for i in range(num_iterations):
x.append((i, i))
x = np.array(x)
N = 50000
print timeit.timeit('f1(N)', setup='from __main__ import f1, N', number=1)
print timeit.timeit('f2(N)', setup='from __main__ import f2, N', number=1)
print timeit.timeit('f3(N)', setup='from __main__ import f3, N', number=1)
我既不会使用 np.append 也不会使用 vstack,我只是正确创建我的 python 数组,然后用它来构造 np.array
EDIT
这是我的笔记本电脑上的基准输出:
- 附加:12.4983000173
- 虚拟堆栈:1.60663705793
- 列表:0.0252208517006
【14.3秒完成】
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)