如何将元组附加到numpy数组而不是按元素方式执行?

Ano*_*ous 5 python arrays numpy

如果我试试

x = np.append(x, (2,3))

元组(2,3)没有得到追加到数组的末尾,而23获得单独附加,即使我最初宣布x

x = np.array([], dtype = tuple)

要么

x = np.array([], dtype = (int,2))

这样做的正确方法是什么?

BPL*_*BPL 5

我同意@ 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)
Run Code Online (Sandbox Code Playgroud)

我不会同时使用np.append和vstack,我只是正确地创建我的python数组然后用它来构造np.array

编辑

这是我笔记本电脑上的基准输出:

  • 追加:12.4983000173
  • vstack:1.60663705793
  • 清单:0.0252208517006

[14.3秒完成]