首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数据集计算kw/h的最佳python方法

从数据集计算kw/h的最佳python方法
EN

Stack Overflow用户
提问于 2016-05-23 22:51:26
回答 2查看 1.8K关注 0票数 2

因此,我有一个系统读取电流从我的电能表在设定的间隔(大约每30秒)。

然后,我想把这些读数超过一个小时,并计算使用的kws。

我已经在stakoverflow上看到了2x方法,并且想知道哪一个是最好的。

这里的方法1:https://electronics.stackexchange.com/a/225641

这里的方法2:https://stackoverflow.com/a/16331700/5151115

这是我的测试代码(这是在将电流转换为电源之后),我正在模拟一个加热器和每30秒-29秒的读数。读数仅为1350 W -> 1400 W -> 1350 W。

代码语言:javascript
复制
# build sample data
time = 0
samples = [[0, 1350]]
for i in range(0, 61):
   samples.append([time+30, 1400])
   samples.append([time+59, 1350])
   time += 59

n_samples = len(samples)

# METHOD 1
total_ws = 0.0
for i in range(1, n_samples):
   dt = samples[i][0] - samples[i-1][0]
   average = (samples[i][1] + samples[i-1][1]) / 2
   total_ws += average * dt

print("Total w/s: %0.2f" % total_ws)
print("Total w/h: %0.2f" % (total_ws/samples[-1][0]))


# METHOD 2
total_ws = 0.0
for i in range(0, n_samples - 1):
   total_ws += (samples[i][1] + samples[i + 1][1]) / 2;

total_ws *= (samples[-1][0] - samples[0][0]) / n_samples;

print("Total w/s: %0.2f" % total_ws)
print("Total w/h: %0.2f" % (total_ws/samples[-1][0]))

方法1总w/s: 4948625.00总w/h: 1375.00 = 1.375 Kw/h

方法2:总w/s: 4908392.28总w/h: 1363.82 = 1.363 Kw/h

哪种方法更准确/最好?

第一种方法对我来说似乎更好,因为它给了我1375。这是2倍不同读数的平均值(1350 & 1400)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-24 08:14:45

第二种方法只能在测量之间的dt是常数的情况下使用,我不喜欢它,因为它是一个错误的来源。对于不同的dt和精度,第一种方法要好得多,但我更喜欢另一种方法。看这张图

M1站在第一条路。

“我的”方法是平等的。

代码语言:javascript
复制
# build sample data
time = 0
samples = [[0, 1350]]
for i in range(0, 200):
   samples.append([time+30, 1400])
   samples.append([time+60, 1350])
   time += 60

n_samples = len(samples)

# METHOD 1
total_ws = 0.0
total_t=0
for i in range(1, n_samples):
   dt = samples[i][0] - samples[i-1][0]
   average = (samples[i][1] + samples[i-1][1]) / 2
   total_ws += average * dt
   total_t+=dt
print("Total ws: %0.2f" % total_ws)
print("Total w: %0.2f" % (total_ws/total_t))

# METHOD 2
total_ws = 0.0
for i in range(0, n_samples - 1):
   total_ws += (samples[i][1] + samples[i + 1][1]) / 2;
total_ws *= (samples[-1][0] - samples[0][0]) / n_samples;
print("Total ws: %0.2f" % total_ws)
print("Total w: %0.2f" % (total_ws/samples[-1][0]))


# "My" METHOD 
total_ws = 0.0
total_t=0
for index in range(len(samples)):
    if index==0:dt=samples[index+1][0]/2.
    elif index==len(samples)-1:dt=(samples[index][0]-samples[index-1][0])/2.
    else:dt=(samples[index+1][0]-samples[index-1][0])/2.
    total_t+=dt
    total_ws+=samples[index][1] * dt
print("Total ws: %0.2f" % total_ws)
print("Total w: %0.2f" % (total_ws/total_t))

请注意我在方法1中所做的修改

代码语言:javascript
复制
>>Total ws: 16500000.00
>>Total w: 1375.00
>>Total ws: 15950000.00
>>Total w: 1329.17
>>Total ws: 16500000.00
>>Total w: 1375.00
票数 2
EN

Stack Overflow用户

发布于 2016-05-25 07:47:05

t2-t1 =1小时

S1是从t1到t2 (又名integrale)的蓝色曲线下的区域。

E1 (Joules) = S1(w)/3600(s),因此它表示下一个小时的本地总功耗。

然后,您只需选择一天中最大的E1,以获得最耗电的时间,在这种情况下,h=7到7+1!

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

https://stackoverflow.com/questions/37401787

复制
相关文章

相似问题

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