Python 如何在循环中对数组进行列堆栈?

Python 如何在循环中对数组进行列堆栈?,python,arrays,numpy,Python,Arrays,Numpy,我有一个生成2d数组的函数。我正在for循环中运行函数以生成数据。循环完成后,我希望将每个二维阵列合并(水平堆叠),以便将其导出到csv文件 我发现column_stack函数对于以我想要的方式堆叠数组非常有用。假设“results”是我的函数返回的2d数组。如果我有一个初始数组,我可以按我想要的方式将其堆叠起来。此时我没有初始数组。 但是,是否有任何方法可以在for循环中生成一个数组,并从以下迭代中附加其他2d数组 np.column_stack((results,results)) ar

我有一个生成2d数组的函数。我正在for循环中运行函数以生成数据。循环完成后,我希望将每个二维阵列合并(水平堆叠),以便将其导出到csv文件

我发现column_stack函数对于以我想要的方式堆叠数组非常有用。假设“results”是我的函数返回的2d数组。如果我有一个初始数组,我可以按我想要的方式将其堆叠起来。此时我没有初始数组。
但是,是否有任何方法可以在for循环中生成一个数组,并从以下迭代中附加其他2d数组

np.column_stack((results,results))


array([[-2.7532e-03,  1.1973e-06, -2.7532e-03,  1.1973e-06],
       [ 9.7603e-02,  1.9542e-06,  9.7603e-02,  1.9542e-06],
       [ 1.9770e-01,  2.0952e-06,  1.9770e-01,  2.0952e-06],
       [ 2.9758e-01,  2.1637e-06,  2.9758e-01,  2.1637e-06],
       [ 3.9787e-01,  1.4734e-06,  3.9787e-01,  1.4734e-06],
       [ 4.9795e-01,  1.3670e-06,  4.9795e-01,  1.3670e-06],
       [ 5.9790e-01,  2.0252e-06,  5.9790e-01,  2.0252e-06],
       [ 6.9817e-01,  2.1771e-06,  6.9817e-01,  2.1771e-06],
       [ 7.9837e-01,  1.2704e-06,  7.9837e-01,  1.2704e-06],
       [ 8.9822e-01,  2.1794e-06,  8.9822e-01,  2.1794e-06],
       [ 9.9847e-01,  1.4442e-06,  9.9847e-01,  1.4442e-06]])
以下是我正试图做的:

from xtralien import *
from numpy import *


### 1.Sweep Settings ###
vstart = 0  #Starting Voltage (V)
vend = 1    #End Voltage (V)
vstep = 0.1 #Step Size (V)
smu = 'SMU1'

### 2.Create Variables ###
vnum = ((vend-vstart)/vstep) + 1 #Calculate number of steps in sweep
volts = linspace(vstart,vend,vnum) #Create voltage list

### 3. Perform Sweep ###
with X100.USB('COM5') as Dev1: #Connect to the Device via USB
    for i in [1,2,3,4,5]: ################This list is just an example. in the program it might be of any length!!
        Dev1['SMU2'].oneshot(i)
        results = vstack([Dev1[smu].oneshot(v) for v in volts]) 
我希望所有的结果都被叠加到一个单一的。
提前感谢

我建议使用pandas,只需将数据附加到for循环中的数据帧,然后在数据后置进行concat。像这样

import pandas as pd

AJ=[]

for i in [1,2,3,4,5]:
    Dev1['SMU2'].oneshot(i)
    results = vstack([Dev1[smu].oneshot(v) for v in volts])
    AJ.append(results) 

AJ=pd.concat(AJ)


注意,在for循环之后,AJ将只是一个数据帧的数据帧,可以以多种不同的方式组合。要了解更多信息,此网站非常有用

我建议使用pandas,只需将数据附加到For循环中的数据框中,然后在数据后置词中进行concat。像这样

import pandas as pd

AJ=[]

for i in [1,2,3,4,5]:
    Dev1['SMU2'].oneshot(i)
    results = vstack([Dev1[smu].oneshot(v) for v in volts])
    AJ.append(results) 

AJ=pd.concat(AJ)


注意,在for循环之后,AJ将只是一个数据帧的数据帧,可以以多种不同的方式组合。有关更多信息,本网站非常有用

如果您想构建一个数组,该数组可用作初始值,您可以从空列表中构建其他数组

演示:

给出:

array([[-2.7532e-03,  1.1973e-06, -2.7532e-03,  1.1973e-06],
       [ 9.7603e-02,  1.9542e-06,  9.7603e-02,  1.9542e-06],
       [ 1.9770e-01,  2.0952e-06,  1.9770e-01,  2.0952e-06],
       [ 2.9758e-01,  2.1637e-06,  2.9758e-01,  2.1637e-06],
       [ 3.9787e-01,  1.4734e-06,  3.9787e-01,  1.4734e-06],
       [ 4.9795e-01,  1.3670e-06,  4.9795e-01,  1.3670e-06],
       [ 5.9790e-01,  2.0252e-06,  5.9790e-01,  2.0252e-06],
       [ 6.9817e-01,  2.1771e-06,  6.9817e-01,  2.1771e-06],
       [ 7.9837e-01,  1.2704e-06,  7.9837e-01,  1.2704e-06],
       [ 8.9822e-01,  2.1794e-06,  8.9822e-01,  2.1794e-06],
       [ 9.9847e-01,  1.4442e-06,  9.9847e-01,  1.4442e-06]])

如果要构建一个数组,该数组可以用作
column\u vstack
其他数组的初始值,则可以从空列表中构建它

演示:

给出:

array([[-2.7532e-03,  1.1973e-06, -2.7532e-03,  1.1973e-06],
       [ 9.7603e-02,  1.9542e-06,  9.7603e-02,  1.9542e-06],
       [ 1.9770e-01,  2.0952e-06,  1.9770e-01,  2.0952e-06],
       [ 2.9758e-01,  2.1637e-06,  2.9758e-01,  2.1637e-06],
       [ 3.9787e-01,  1.4734e-06,  3.9787e-01,  1.4734e-06],
       [ 4.9795e-01,  1.3670e-06,  4.9795e-01,  1.3670e-06],
       [ 5.9790e-01,  2.0252e-06,  5.9790e-01,  2.0252e-06],
       [ 6.9817e-01,  2.1771e-06,  6.9817e-01,  2.1771e-06],
       [ 7.9837e-01,  1.2704e-06,  7.9837e-01,  1.2704e-06],
       [ 8.9822e-01,  2.1794e-06,  8.9822e-01,  2.1794e-06],
       [ 9.9847e-01,  1.4442e-06,  9.9847e-01,  1.4442e-06]])

因此,您希望在每次迭代时生成一个大小为[Nx1]的新数组,并将其附加到
结果中
?最好收集列表中的所有数组(
list.append
),并在最后执行一个
列堆栈
)。迭代堆叠速度较慢,而且更难初始化(如您的问题所示)。请注意,您已经正确地使用了
vstack
——应用于列表理解生成的列表。因此,您希望在每次迭代时生成一个新的大小为[Nx1]的数组,并将其附加到
结果中
?最好收集列表中的所有数组(
list.append
),并在末尾执行一个
列堆栈
。迭代堆叠速度较慢,而且更难初始化(如您的问题所示)。请注意,您已经正确地使用了
vstack
应用于列表理解生成的列表。什么是
AJ
开始为?我的道歉AJ只是一个空数据框开始看起来更像一个空列表。什么是
AJ
开始为?我的道歉AJ只是一个空数据框开始看起来更像一个空列表list@hpaulj:我从未将维度设置为0,但它确实可以正常工作@hpaulj:我从未将维度设置为0,但它确实工作得很好!