Python 如何将1D numpy阵列元素线转换为新的1D numpy阵列?

Python 如何将1D numpy阵列元素线转换为新的1D numpy阵列?,python,numpy,Python,Numpy,我有nnumpy1d数组ì0=[i00,i01,i02,…],I_1=[i10,i11,i12,…]。。。并且希望将值放入新的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

我有
n
numpy1d数组
ì0=[i00,i01,i02,…]
I_1=[i10,i11,i12,…]
。。。并且希望将值放入新的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])
或进入2D数组
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列表理解或类似的方法来为实际具有更多输入/输出向量的矩阵执行此操作



这个答案是针对您的情况的,但希望能够演示如何使用
numpy
数组在单个调用(或几个调用)中执行操作,而不是像C/C++这样迭代每个元素的语言。在幕后,这就是numpy为您所做的(实际上是在C中),因此您可以在python中获得类似C的性能。如果您熟悉低级语言,那么在使用numpy时可能需要改变您的思维方式

首先是一个问题:为什么元素是明智的?您想在从输入阵列到输出阵列的过程中对每个点执行操作吗?如果是这样的话,您或者需要简单地循环输入数组,或者使用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列表理解或类似的方法来为实际具有更多输入/输出向量的矩阵执行此操作




这个答案是针对您的情况的,但希望能够演示如何使用
numpy
数组在单个调用(或几个调用)中执行操作,而不是像C/C++这样迭代每个元素的语言。在幕后,这就是numpy为您所做的(实际上是在C中),因此您可以在python中获得类似C的性能。如果您熟悉低级语言,那么在使用numpy时可能需要改变您的思维方式

能否提供一个包含输入和所需输出的最小代码示例?让我们将float作为元素数据类型。实际值是不相关的。如果将转换封装到函数中,则输出将作为2D数组提供(
[o_0,0_1,…]
).Sry,typo。对于输出,我指的是一个2D数组,如
[o_0,o_1,…,o_(m-1)]
我仍然不确定您的确切意思。您可以在帖子中添加一个示例(使用编辑按钮而不是添加更多注释),示例数组只包含两到三个元素,然后输出该输入。人们实际上可以跑的东西总是好的。一般来说,如果要单独迭代所有元素,可能不需要NumPy,并且可以从基本python列表中获得更好的性能。@n1k31t4我添加了示例。能否提供一个包含输入和所需输出的最小代码示例?让我们将float作为元素数据类型。实际值是不相关的。如果将转换封装到函数中,则输出将作为2D数组提供(
[o_0,0_1,…]
).Sry,typo。对于输出,我指的是一个2D数组,如
[o_0,o_1,…,o_(m-1)]
我仍然不确定您的确切意思。您可以在帖子中添加一个示例(使用编辑按钮而不是添加更多注释),示例数组只包含两到三个元素,然后输出该输入。人们实际上可以跑的东西总是好的。一般来说,如果要逐个迭代所有元素,可能不需要NumPy,并且可以从基本python列表中获得更好的性能。@n1k31t4我添加了示例。您是对的,转换不应按元素进行,而应针对所有元素。我相应地改进了这个问题。如果我运行
o_1,o_2=result
我会得到
ValueError:太多的值无法解压缩(预期为2)
。当使用pandas数据帧而不是numpy数组时,等效的代码会是什么样子?数据帧的性能不如数组,我想…@thinwybk-Pandas数据帧在引擎盖下有一个基本的numpy数组,因此您可以使用与上面相同的代码,指定数据帧的数组
df
,如下所示:
df.values
。您是对的,转换不应按元素进行,而应针对所有元素。我相应地改进了这个问题。如果我运行
o_1,o_2=result
我会得到
ValueError:太多的值无法解包(预期为2)
。当