繁体   English   中英

如何将一维numpy数组元素线转换为新的一维numpy数组?

[英]How to convert 1D numpy arrays element-wire into new 1D numpy array?

我有n numpy 1D数组ì_0 = [i00, i01, i02, ...]i_1 = [i10, i11, i12, ...] ,...并想将值放入m新的1D数组中o_0 = [i00, i10, 120, ...]o_1 = [i01, i11, i21, ...] ,...,其中m是等长数组i_0i_1 ,...的元素计数。 我如何才能实现最佳性能(迭代o_0o_1 ,...数组时可能启用Python惰性)?

考虑此示例输入数据i_0 (向上), i_1

import numpy as np

i_0 = np.array([1.0, 2, 3])
i_1 = np.array([1.1, 2.1, 3.1])

应该转换为m=3输出o_0o_1o_2

o_0 = np.array([1.0, 1.1])
o_1 = np.array([2.0, 2.1])
o_2 = np.array([3.0, 3.1])

或成一个二维数组o

o = np.array([[1.0, 1.1], [2.0, 2.1], [3.0, 3.1]])

相当于

o = np.array([o_0, o_1, o_2])

首先是一个问题:为什么要明智? 您是否想对从输入到输出数组的每个过程进行处理? 如果是这样,您要么只需要简单地循环输入数组,就可以使用python的yield (也许可以节省工作内存)。 另外,如果可能的话,您可以将步骤包含在一个函数中,以对操作进行矢量化处理,从而一次性(在元素上)一次在完整的numpy数组上执行。

编辑:

在这种情况下(您的特定示例),这实际上非常简单,因为您可以将输入数组连接到单个矩阵中,例如:

input = np.vstack([i_0, i_1])

现在简单地转置矩阵,以获得结果:

result = input.T

要再次从向量中提取数组,您可以像这样解压缩它们:

o_1, o_2 = result    # 2 output arrays for input arrays, each of 2 elements

您可以使用python 列表推导或类似方法对实际上具有更多输入/输出向量的矩阵执行此操作。


这个答案是特定于您的情况的,但希望展示与在每个元素上进行迭代的C / C ++之类的语言相比, numpy数组如何在单个调用(或几个调用)中执行操作。 在后台,这就是numpy为您所做的(实际上是在C中),因此您在python中获得了类似于C的性能。 如果您熟悉低级语言,则在考虑使用numpy时可能需要更改方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM