有没有办法从大多数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) 首先,我想干净利落地说下面的问题是针对学校的,所以不要对我太苛刻:)
我在使用递归算法(这是一个要求)在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中实现这一点?
这是我到目前为止:
主文件 …
Matlab的tfestimate()是否有Python版本?我已经研究了控制工具箱,但它仅提供线性传递函数。
我正在使用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)
如果您能帮助解决这个菜鸟问题,请提前感谢您.
我已经确认genfromtxt函数(以及从它派生的函数)以静默方式缓存它们在本地目录中处理的远程文件,并在后续调用中使用本地副本,而不检查它是否已更改.
通过查看源文件npyio.py,似乎发生这种情况是因为处理请求的DataSource对象是在不传递相关参数的情况下创建的.当然很容易修改库源来禁用缓存,但是每次升级后我都要重复它.
还有其他解决方案吗?(除了每次删除缓存目录)
我试图在等边三角形的边上画出看起来像刻度线的尖齿。我正在使用 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 画这些线?
编辑:*** 三角形代码如下
所以我想在内存中记录错误(我不想写任何日志文件)并在以后访问它们以在程序执行后以批量形式显示它们.它看起来像:
...
Program executing ...
...
Errors occured !
Error 1 : ...
Error 2 : ...
Run Code Online (Sandbox Code Playgroud)
我不是在问自己该如何做,而是如果一些现有的模块能够做到这一点.我想尽可能使用标准模块.
为即将到来的考试提供了一些练习题.我已经给出了这个问题的解决方案,这里描述了这个问题

解决方案确实没有解释.
我很好奇我怎么能在这里得到答案.我想我可以创建一堆子问题
从A-> C,A-> D,A-> E遍历,然后基于先前的解决方案找出A-> B. 但我很失落.
我有一个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列表,如下所示:
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中执行此操作?
有没有办法让列表理解这个条件集.
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)
谢谢
对于新手练习,我试图在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 ×10
list ×2
matlab ×2
numpy ×2
python-2.7 ×2
algorithm ×1
astronomy ×1
datetime ×1
ipython ×1
leap-second ×1
logging ×1
matplotlib ×1
optimization ×1
recursion ×1
scipy ×1
tuples ×1
tzinfo ×1