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