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