小编Bas*_*els的帖子

从tzdata中提取历史性的闰秒

有没有办法从大多数Linux发行版上分发的时区数据库中提取历史性闰秒的时刻?我在python中寻找一个解决方案,但在命令行上运行的任何东西都可以.

我的用例是在gps-time(基本上是自1980年第一颗GPS卫星开启以来的秒数)和UTC或当地时间之间进行转换.UTC每隔一段时间调整一次闰秒,而gps-time会线性增加.这相当于在UTC和TAI之间进行转换.TAI也忽略了闰秒,所以TAI和gps-time应该始终以相同的偏移量进化.在工作中,我们使用gps-time作为同步全球天文观测的时间标准.

我有工作函数在gps-time和UTC之间转换,但我不得不硬编码闰秒表,我在这里(文件tzdata2013xx.tar.gz包含一个名为的文件leapseconds).每隔几年宣布新的leapsecond时,我必须手动更新此文件.我更希望从标准的tzdata中获取此信息,该信息每年通过系统更新自动更新几次.

我很确定这些信息隐藏在某些二进制文件中 /usr/share/zoneinfo/.我已经能够使用struct.unpack(man tzfile提供有关格式的一些信息)来提取它,但我从来没有完全使用它.是否有可以访问此信息的标准软件包?我知道pytz,它似乎从同一个数据库中获取标准的DST信息,但它不能提供对闰秒的访问.我也找到了tai64n,但是看看它的源代码,它只包含一个硬编码表.

编辑

灵感来自steveha的答案和pytz/tzfile.py中的一些代码,我终于得到了一个有效的解决方案(在py2.5和py2.7上测试):

from struct import unpack, calcsize
from datetime import datetime

def print_leap(tzfile = '/usr/share/zoneinfo/right/UTC'):
    with open(tzfile, 'rb') as f:
        # read header
        fmt = '>4s c 15x 6l'
        (magic, format, ttisgmtcnt, ttisstdcnt,leapcnt, timecnt,
            typecnt, charcnt) =  unpack(fmt, f.read(calcsize(fmt)))
        assert magic == 'TZif'.encode('US-ASCII'), 'Not a timezone file'
        print 'Found %i leapseconds:' % leapcnt

        # skip …
Run Code Online (Sandbox Code Playgroud)

python datetime astronomy tzinfo leap-second

20
推荐指数
1
解决办法
2424
查看次数

动态编程 - 递归实现

首先,我想干净利落地说下面的问题是针对学校的,所以不要对我太苛刻:)

我在使用递归算法(这是一个要求)在matlab中建模优化问题时遇到了一些问题.

问题的定义是:

考虑到10年的时间窗口确定每年要捕获的鱼的数量,知道湖中目前有10000条鱼,第1年,鱼的增长率是每年年初湖中存在的鱼的数量+ 20%.

设x是要捕获的鱼的数量,每条鱼的价格是5美元以及捕鱼的成本:

0.4x + 100 if x is <= 5000; 
0.3x + 5000 if  5000 <= x <= 10000; 
0.2x + 10000 if x > 10000; 
Run Code Online (Sandbox Code Playgroud)

决定每年捕捞鱼类的数量,为期10年,以便最大限度地提高利润.

未来收益的折旧率为0.2 /年,这意味着第1年的收入为1美元,与第2年的0.8美元相同,依此类推.

我目前定义了以下目标函数:

x -> quantity of fish to catch
b-> quantity of fish availavable in the beginning of year i
c(x,b) -> cost of catching x fish with b fishes available

f_i(b) = max {(5x - c(x,b)) + 0.8 * f_i+1((b - x) * 1.2)}
Run Code Online (Sandbox Code Playgroud)

我将如何在matlab中实现这一点?

这是我到目前为止:

主文件 …

optimization recursion matlab dynamic-programming

6
推荐指数
1
解决办法
8558
查看次数

Matlab Signal Toolbox的tfestimate()的Python版本?

Matlab的tfestimate()是否有Python版本?我已经研究了控制工具箱,但它仅提供线性传递函数。

python matlab numpy scipy

6
推荐指数
1
解决办法
2320
查看次数

在IPython控制台(Spyder)中,我可以在运行程序后从main()访问变量吗?

我正在使用IPython控制台运行我的代码.我有一个main()执行如下的函数:

if __name__ == "__main__":  
    main()
Run Code Online (Sandbox Code Playgroud)

然后main()调用一堆其他函数,我不使用任何类.我的问题是,在运行程序后,我可以在控制台中以交互方式打印或操作变量吗?

就像我没有main()或任何其他功能一样,例如我可以在我的代码中声明:

a=1
Run Code Online (Sandbox Code Playgroud)

然后从控制台轻松访问:

In [20]: a

Out[20]: 1
Run Code Online (Sandbox Code Playgroud)

如果您能帮助解决这个菜鸟问题,请提前感谢您.

python ipython

5
推荐指数
1
解决办法
649
查看次数

genfromtxt:如何禁用缓存

我已经确认genfromtxt函数(以及从它派生的函数)以静默方式缓存它们在本地目录中处理的远程文件,并在后续调用中使用本地副本,而不检查它是否已更改.
通过查看源文件npyio.py,似乎发生这种情况是因为处理请求的DataSource对象是在不传递相关参数的情况下创建的.当然很容易修改库源来禁用缓存,但是每次升级后我都要重复它.
还有其他解决方案吗?(除了每次删除缓存目录)

python numpy

5
推荐指数
1
解决办法
260
查看次数

Python (Matplotlib) - 三元图上的刻度线

我试图在等边三角形的边上画出看起来像刻度线的尖齿。我正在使用 Python 中的 Matplotlib 来完成此操作。

这是等边三角形***:

import matplotlib.pyplot as plt
from pylab import *
fig = figure()
ax = fig.add_subplot(111)
ax.axis('equal')
ax.plot([1, 0.5], [0, 0.866], 'k-')
ax.plot([0, 0.5], [0, 0.866], 'k-')
ax.plot([0, 1], [0, 0], 'k-')
ax.plot([0.5, 1.01, 0.1], [-0.01, 0.5, 0.88], 'w.') #base boundary
plt.show()
Run Code Online (Sandbox Code Playgroud)

此处可以看到生成的图像。代码中的三角形

现在,我想添加看起来像刻度线的线条。线条将像此处所示的 1:07-1:29 和 2:19-2:32一样绘制。

我希望输出看起来像这个图像。在此输入图像描述

有没有办法用 Matplotlib 画这些线?

编辑:*** 三角形代码如下

python matplotlib python-2.7

5
推荐指数
1
解决办法
1959
查看次数

是否有一个模块可以记录内存中的错误?

所以我想在内存中记录错误(我不想写任何日志文件)并在以后访问它们以在程序执行后以批量形式显示它们.它看起来像:

...
Program executing ...
...
Errors occured !
Error 1 : ...
Error 2 : ...
Run Code Online (Sandbox Code Playgroud)

我不是在问自己该如何做,而是如果一些现有的模块能够做到这一点.我想尽可能使用标准模块.

python logging python-2.7

4
推荐指数
1
解决办法
892
查看次数

动态编程算法:在网格上行走

为即将到来的考试提供了一些练习题.我已经给出了这个问题的解决方案,这里描述了这个问题 在此输入图像描述

解决方案确实没有解释.

我很好奇我怎么能在这里得到答案.我想我可以创建一堆子问题

从A-> C,A-> D,A-> E遍历,然后基于先前的解决方案找出A-> B. 但我很失落.

algorithm dynamic-programming

4
推荐指数
1
解决办法
1030
查看次数

通过索引列表置换元组

我有一个3元素的python元组,我正在尝试使用3元素列表的索引进行排序或重新排列,我想知道最简洁的方法是什么.

到目前为止我有:

my_tuple = (10, 20, 30)
new_positions = [2, 0, 1]
my_shuffled_tuple = my_tuple[new_positions[0]], my_tuple[new_positions[1]], my_tuple[new_positions[2]]
# outputs: (30, 10, 20)
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我也得到相同的结果:

my_shuffled_tuple = tuple([my_tuple[i] for i in new_positions])
Run Code Online (Sandbox Code Playgroud)

是否有更简洁的创作方式my_shuffled_tuple

python tuples

3
推荐指数
1
解决办法
1248
查看次数

为列表条目提供索引

我有一个Python列表,如下所示:

A1 = ['a','a','a','foo','c','d','a','e','bar','bar','bar','e','d','d']
Run Code Online (Sandbox Code Playgroud)

我想把它变成这个......

A2 = [1,1,1,2,3,4,1,5,6,6,6,5,4,4]
Run Code Online (Sandbox Code Playgroud)

... A1中的条目按顺序排列,并在A2中给出增量索引.

有没有直接的方法在Python中执行此操作?

python list

2
推荐指数
1
解决办法
76
查看次数

将嵌套循环和条件转换为列表推导

有没有办法让列表理解这个条件集.

clamp_sel = list()
for i in range(0, len(clamp_normalized)):
        for j in range(0, len(clamp_normalized[i])):
                if clamp_normalized[i][j][0] < int(max_min_band[index_selec]):
                        clamp_sel.append(int(clamp_normalized[i][j][0]))
Run Code Online (Sandbox Code Playgroud)

如果它是单维列表,我可以用这种方式设置条件.

norm_sel = [i for i in normalize_data if i[0] > max_min_band[index_selec]]
Run Code Online (Sandbox Code Playgroud)

谢谢

python list

1
推荐指数
2
解决办法
1235
查看次数

Python:另一个'NoneType'对象没有属性错误

对于新手练习,我试图在html文件中找到元标记并提取生成器,所以我喜欢这样:

Version = soup.find("meta", {"name":"generator"})['content']
Run Code Online (Sandbox Code Playgroud)

因为我有这个错误:

TypeError: 'NoneType' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)

我以为使用异常会纠正它,所以我写道:

try: Version = soup.find("meta", {"name":"generator"})['content']

except NameError,TypeError:

     print "Not found"
Run Code Online (Sandbox Code Playgroud)

而我得到的是同样的错误.

那我该怎么办?

python error-handling beautifulsoup

0
推荐指数
1
解决办法
7210
查看次数