首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >产生幅度与电压相等的触发脉冲

产生幅度与电压相等的触发脉冲
EN

Stack Overflow用户
提问于 2020-11-27 15:08:52
回答 1查看 66关注 0票数 0

我想做的基本上是标题上说的。我有一系列的脉冲,我产生了一个矩形的“触发”脉冲,当上升的边缘超过一个阈值时。虽然到目前为止,我只能创造出这些恒定振幅的触发脉冲。我有一个脉冲振幅阵列(脉冲高度)和一个触发指数阵列(triggersLED),它们各自都有1000个元素。我试图编写我的代码,这样触发脉冲的幅度将等于每个元素的脉冲高度值。我在下面添加了我的代码,但是在绘制触发脉冲时,它们的高度是恒定的,而不是输入脉冲的高度相同。

前5个脉冲高度值为0.0448、0.0416、0.0204、0.0328、0.068,前5个触发指数为9762、49775、89872、129843、169753。

我希望第一次触发脉冲发生在9762,高度0.0448。这意味着cLED将有0到9761指数,然后在下一个4000个指数中值为0.0448,然后返回到零。下一个触发点发生在49775,高度0.0416等等.这些触发脉冲的宽度并不重要(我在代码中将其设置为4000 )。

代码语言:javascript
复制
cLED = np.zeros(4000000)

for a in range(1000):

    for b in triggersLED:

        cLED[b:b+4000] = pulseheight[a]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-27 16:21:00

这是可行的,但可能有更好的方法。迭代索引和幅值,并将其分配给切片。

代码语言:javascript
复制
import numpy as np
pulseheight = np.array([0.0448, 0.0416, 0.0204, 0.0328, 0.068])
trigger = np.array([9, 49, 89, 129, 169]) 
width = 4
cLED = np.zeros(200)

for i,a in zip(trigger,pulseheight):
    cLED[i:i+width] = a

变异:可能没有什么更好的。

代码语言:javascript
复制
cleds = np.split(cLED,trigger)

for i,a in enumerate(cleds[1:]):
    a[:width] = pulseheight[i]

cleds = np.concatenate(cleds)

尝试摆脱pythonfor循环。在触发器索引上拆分cLED;将得到的数组填充到相同的宽度,以便它们可以连接到2d数组;进行赋值;平坦并删除nan的数组。

代码语言:javascript
复制
pad_width = np.diff(trigger).max()
cleds = np.vstack((np.pad(a,(0,pad_width-len(a)),constant_values=np.nan) for a in cleds))
cleds[1:,:4] = pulseheight[:,None]
cleds = np.ravel(cleds)
cleds = cleds[~np.isnan(cleds)]

另一个使用Pandas的变体,它最终具有稀疏的行,所以当数据被重新组合时,需要删除nan填充值。使用分配到片和广播。

代码语言:javascript
复制
import pandas as pd
# using arrays defined above
cleds = np.split(cLED,trigger)
df = pd.DataFrame(cleds)
df.iloc[1:,:4] = pulseheight[:,None]
q = np.concatenate(df.values)
q = q[~np.isnan(q)]

我真的没有感觉到哪一个是最好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65039576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档