python - Numpy 联合数组顺序

标签 python numpy

我有三个不同的 numpy 数组

a = array([ 0,  3,  6,  9, 12])
b = array([ 1,  4,  7, 10, 13])
c = array([ 2,  5,  8, 11, 14])

我如何使用 numpy 方法加入他们

d = array[(0,1,2,3,4,...,12,13,14)]

我不想写这样的循环

for i in range(len(a)):
 [...]

这只是我项目中的一个例子,数组没有排序,我想保持它们的顺序。

最佳答案

您可以转置和展平数组:

d = numpy.array([a, b, c]).T.flatten()

另一种组合数组的方法是使用 numpy.vstack():

d = numpy.vstack((a, b, c)).T.flatten()

(顺便说一句,我不知道哪个更快。)

编辑:响应answer by Nicolas Barbey ,这里是如何只复制一次数据:

d = numpy.empty((len(a), 3), dtype=a.dtype)
d[:, 0], d[:, 1], d[:, 2] = a, b, c
d = d.ravel()

此代码确保数据以 ravel() 的方式布局 不需要复制,而且确实比我机器上的原始代码快很多:

In [1]: a = numpy.arange(0, 30000, 3)
In [2]: b = numpy.arange(1, 30000, 3)
In [3]: c = numpy.arange(2, 30000, 3)
In [4]: def f(a, b, c):
   ...:     d = numpy.empty((len(a), 3), dtype=a.dtype)
   ...:     d[:, 0], d[:, 1], d[:, 2] = a, b, c
   ...:     return d.ravel()
   ...: 
In [5]: def g(a, b, c):
   ...:     return numpy.vstack((a, b, c)).T.ravel()
   ...: 
In [6]: %timeit f(a, b, c)
10000 loops, best of 3: 34.4 us per loop
In [7]: %timeit g(a, b, c)
10000 loops, best of 3: 177 us per loop

关于python - Numpy 联合数组顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11830474/

相关文章:

python - 阻止 Python enumerate() 将字符串拆分为字符

arrays - 在numpy中创建具有不同维度的数组数组

python - 如何使用 'expected conditions' 检查 python-selenium 中的元素?

python - numpy 数组中的奇怪赋值

python - 如何获取numpy数组中所有NaN值的索引列表?

python - tf.random_crop 不能与通配符一起使用?

python - 如何从字符串列表中导出二进制数组

python - 如何使用 NLTK 从句子中提取特定信息

python - 如何使用uproot加载引用值(TRefArray)

python - 使用 json_modify.py 更改 JSON 键名称