给定从 0 开始的新时间值列表,有没有办法以秒为单位扩展时间值列表?

Is there a way to extend a list of time values in seconds given a new list of time values starting at 0?

我有一个 python 程序 运行 将一个串行端口连接到一个小板。一旦完成一种方法,程序就会从板上收到三个列表:tvoltcurr。我有三个要使用这些值构建的列表:t_listvolt_listcurr_list。该板连接到 iorodeo potentiostat,每个方法周期只能 运行 25 个周期,因此我需要传递它从 tvoltcurr 给出的值到 t_listvolt_listcurr_list 方法循环 x 次,以达到 25 次循环限制。问题是时间列表 t 在每个方法循环的 0.003 秒重新开始,所以我最终在最后的 t_list 中得到了一个重复的时间列表。有没有办法获取每个新的 t 并让 python 程序计算一个新列表,该列表从最后一次开始到以秒为单位的总时间结束? 列表 t 给出了一个以秒为单位的时间列表,其长度与 currvolt 列表相同。对于下面的脚本,第一种方法 returns 一个长度为 250 的列表 t,从 0.003 秒开始到 0.75 秒结束。每个方法循环应该都一样。

这是脚本:

# -*- coding: utf-8 -*-
"""
Created on Sat Sep 18 18:34:59 2021

@author: dallo
"""
from potentiostat import Potentiostat
import sys
import matplotlib.pyplot as plt
from serial import Serial

port = 'COM7'

num_pulse = 25  # Number of pulses (max = 25)
lo_pulse = (10, -1.0)  
hi_pulse = (20, -0.1)  
num_cycles = 3
dev = Potentiostat(port)
hw_variant = dev.get_hardware_variant()

dev.set_curr_range('1000uA')
dev.set_sample_rate(300)

step_list = []
curr_list = []
volt_list = []
t_list = []
# Add pulses to step list
for i in range(num_pulse):
    step_list.append(lo_pulse)
    step_list.append(hi_pulse)


# Test name and test parameters
test_name = 'multiStep'
test_param = {
        'quietValue' : 0.0,
        'quietTime'  : 0,
        'step'       : step_list,
        }
for i in range(num_cycles):
    volt = []
    curr = []
    dev.set_param(test_name,test_param)
    t,volt,curr = dev.run_test(test_name,display='pbar')
    curr_list.extend(curr)
    volt_list.extend(volt)
    t_list.extend(t)

volt_ax = plt.subplot(2,1,1)
plt.plot(t_list,volt_list)
plt.ylabel('potential (V)')
plt.grid('on')

plt.subplot(2,1,2, sharex=volt_ax)
plt.plot(t_list,curr_list)
plt.ylabel('current (uA)')
plt.xlabel('t (sec)')
plt.grid('on')

plt.show()

您可以尝试通过在 t_list 中添加具有以下形式的字典来跟踪时间:

tmp_dict = {time_of_the_iteration: t}

这样代码就变成了:

....

from datetime import datetime

....

for i in range(num_cycles):
    volt = []
    curr = []
    dev.set_param(test_name,test_param)
    t,volt,curr = dev.run_test(test_name,display='pbar')
    curr_list.extend(curr)
    volt_list.extend(volt)
    
    
    actual_time = datetime.now().strftime('%H:%M:%S')
    tmp_dict = {actual_time: t}
    
    t_list.extend(tmp_dict)

这样每个 t.

都有不同的时间

我想通了。我在 for 循环中添加了以下代码:

for i in range(num_cycles):
    volt = []
    curr = []
    t = []
    dev.set_param(test_name,test_param)
    t,volt,curr = dev.run_test(test_name,display='pbar')
    curr_list.extend(curr)
    volt_list.extend(volt)
    
    if len(t_list) > 0:
        last_time = t_list[-1]
        new_t_list = [x+last_time for x in t]
        t_list.extend(new_t_list)
    else:
        t_list.extend(t)

这从 t_list 获取最后(最新)时间值,并将其添加到每个新方法循环的下一个 t 列表中的每个新值。例如,如果第一个 t 列表是 [1,2,3,4,5] 而下一个 t 列表是相同的 [1,2,3,4,5] 它会从第一个 t 中获取最后一个值并添加它到第二个 t 列表的每个元素,并将这些新元素添加到 t_list,给出 [1,2,3,4,5,6,7,8,9,10]

的最终 t_list