【问题标题】:Is there a way to extend a list of time values in seconds given a new list of time values starting at 0?给定从 0 开始的新时间值列表,有没有办法以秒为单位扩展时间值列表?
【发布时间】:2021-09-19 19:03:19
【问题描述】:

我有一个运行串行端口的 python 程序连接到一个小板。一旦一种方法完成,程序就会从板子接收三个列表:tvoltcurr。我想使用这些值构建三个列表:t_listvolt_listcurr_list。该板连接到一个 iorodeo 恒电位仪,每个方法周期只能运行 25 个周期,所以我需要将它给出的值从 tvoltcurr 传递到 t_listvolt_listcurr_list 用于 x 次方法循环以绕过 25 个循环限制。问题是时间列表t 在每个方法循环的 0.003 秒处重新启动,所以我最终在最终的t_list 中得到一个重复的时间列表。有没有办法获取每个新的t 并让 python 程序计算一个新列表,该列表从最后一次开始并以总时间(以秒为单位)结束? 列表t 给出了一个以秒为单位的时间列表,其长度与currvolt 列表的长度相同。对于下面的脚本,第一个方法返回一个长度为 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()

【问题讨论】:

  • 能否提供脚本示例?
  • 刚刚添加脚本

标签: python list time teensy


【解决方案1】:

您可以尝试通过在您的 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都有不同的时间。

【讨论】:

    【解决方案2】:

    我能够弄清楚。我在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 2020-03-27
      相关资源
      最近更新 更多