如何在循环中列堆栈数组?

2024-05-29 11:20:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我发现column\u 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]) 

我想把所有的结果都放在一起。 提前谢谢


Tags: 函数infromimportfordev1stack方式
2条回答

我建议使用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将只是一个数据帧的数据帧,可以用许多不同的方式进行组合。有关更多信息,此网站非常有用https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

如果要构建一个数组,该数组可以用作column_vstack其他数组的初始值,可以从空列表列表中构建它。你知道吗

演示:

res = np.array([[]] * 11)      # or better: res = np.zeros(

arr = np.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]])

np.column_stack((res, arr))

提供:

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]])

相关问题 更多 >

    热门问题