![](/img/trans.png)
[英]How do I convert a 2D numpy array into a 1D numpy array of 1D numpy arrays?
[英]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_0
, i_1
,...的元素计数。 我如何才能实现最佳性能(迭代o_0
, o_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_0
, o_1
和o_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.