在M. O'Neill的伟大论文之后,我尝试在Python中实现一些懒惰的,无限版的Eratosthenes Sieve.我惊讶地发现,基于堆的版本,该论文声称应该运行得更快,实际上对我来说实际上慢了两倍.
本文包含两个例子,一个基于dict,我已翻译(来自Haskell),因此:
from itertools import count
def dict_sieve():
yield 2
yield 3
candidates = count(5, 2)
composites = {9:{3}} # map composites to their prime factors
for candidate in candidates:
try:
factors = composites.pop(candidate)
except KeyError: # if it's not in the dict, it's prime
yield candidate
composites[candidate**2] = {candidate} # Euler's optimization: start from prime**2
else:
for prime in factors: # go through the prime factors and increment their keys
try:
composites[candidate+prime*2].add(prime) # use prime*2 …
Run Code Online (Sandbox Code Playgroud) 在Python中,有没有办法在没有"x in"变量的情况下编写这个列表理解(因为它完全没用)?同样适用于生成器表达式.我怀疑这种情况经常发生,但我偶然发现了几次,很想知道.
这是一个例子:
week_array = ['']*7
four_weeks = [week_array[:] for x in range(4)]
Run Code Online (Sandbox Code Playgroud)
(也许,是否有更优雅的方式来构建它?)
我想检查NumPyArray中是否有一个集合中的值,如果是这样,则设置该数组中的区域= 1.如果没有设置keepRaster = 2.
numpyArray = #some imported array
repeatSet= ([3, 5, 6, 8])
confusedRaster = numpyArray[numpy.where(numpyArray in repeatSet)]= 1
Run Code Online (Sandbox Code Playgroud)
产量:
<type 'exceptions.TypeError'>: unhashable type: 'numpy.ndarray'
Run Code Online (Sandbox Code Playgroud)
有没有办法循环它?
for numpyArray
if numpyArray in repeatSet
confusedRaster = 1
else
keepRaster = 2
Run Code Online (Sandbox Code Playgroud)
澄清并要求进一步帮助:
我想要得到的,现在正在做的是将光栅输入放入数组中.我需要读取二维数组中的值,并根据这些值创建另一个数组.如果数组值在一个集合中,那么该值将为1.如果它不在一个集合中,那么该值将从另一个输入派生,但我现在说77.这就是我目前正在使用的.我的测试输入有大约1500行和3500列.它总是在第350行附近冻结.
for rowd in range(0, width):
for cold in range (0, height):
if numpyarray.item(rowd,cold) in repeatSet:
confusedArray[rowd][cold] = 1
else:
if numpyarray.item(rowd,cold) == 0:
confusedArray[rowd][cold] = 0
else:
confusedArray[rowd][cold] = 2
Run Code Online (Sandbox Code Playgroud) 我有几个不同种类的对象(不同的函数名称,不同的签名),我对它们进行修补,以便有一种从不同函数访问它们的通用方法.简而言之,有一个调度程序可以获取我想要修补的对象,并根据它调用不同修补程序的对象类型.修补程序将向对象添加方法:
def patcher_of_some_type(object):
def target(self, value):
# do something and call self methods
object.target = types.MethodType(target, object)
# many more of these
Run Code Online (Sandbox Code Playgroud)
随着程序变得越来越复杂,围绕对象(或对象类)的包装似乎更好.一些修补程序共享公共代码或相互关联.但我不控制对象创建,也不控制类创建.我只得到了这些物品.即使我能做到这一点,我只想包装(或修补)某些对象,而不是所有对象.
一种解决方案可能是为现有对象添加基类,但我不确定这是多么可维护和安全.还有其他解决方案吗?
我正在训练一个神经网络,其中大约有5千兆字节的数据存储为numpy
数组.数据被分成100000行的块,我以随机顺序对所有块进行了六个周期的训练.不幸的是,网络已经开始过度适应.我认为它仍然有能力更紧密地拟合数据; 我怀疑每个块内的内部规则开始相互矛盾,我需要更彻底地调整数据,以便它可以训练不同的组合.我想在获得更多训练数据之前尝试这个.
有谁知道一个很好的方法来生成360万(非常长)的numpy数据行的新排列?我想过使用这些技术之一,但是使用这些数据编写numpy.savetxt
产生令人难以置信的巨大文件,我无法告诉如何以npy
有助于解决此问题的方式处理标准文件中的各个行.
现在,我最好的想法是在数据中创建配对索引的排列(c, r)
,其中c
选择一个块并r
从该块中选择一行.我可以将每一行存储在一个新的预分配数组中,然后保存它.但我想知道是否有一个不那么可怕的I/O限制解决方案.是否有一些原则性的方法可以将随机对的块组合在一起,直到你得到一个统计上独立于起始排列的排列?
出于某种原因,当我做代码时......
def encode():
result2 = []
print result
for x in result:
result2 += str(x)
print result2
Run Code Online (Sandbox Code Playgroud)
我明白了......
[123, 456, 789]
['1', '2', '3', '4', '5', '6', '7', '8', '9']
Run Code Online (Sandbox Code Playgroud)
我如何让它返回['123', '456', '789']
?
谢谢!
我有下一个dockerfile:
FROM ubuntu:16.04
RUN apt-get update && apt-get upgrade -y && apt-get install -y apache2 mysql-server mysql-client
Run Code Online (Sandbox Code Playgroud)
之后,Docker构建问我密码root:
While not mandatory, it is highly recommended that you set a password for the
MySQL administrative "root" user.
If this field is left blank, the password will not be changed.
New password for the MySQL "root" user:
Run Code Online (Sandbox Code Playgroud)
我输入密码,但是,它只是保持该状态.
我可以这样安装mysql吗?我不想自动安装它
我正在尝试使用numpy.loadtxt
如下所示的文件读取数据:
## 14 line of header
3 0 36373.7641026
3 1 36373.7641026
3 2 36373.7641026
...
Run Code Online (Sandbox Code Playgroud)
当我这样说时:
>>> chunk, power = numpy.loadtxt(bf,skiprows=14,usecols=(1,2),unpack=True)
Run Code Online (Sandbox Code Playgroud)
甚至这个:
>>> power = numpy.loadtxt(bf,skiprows=14,usecols=(2))
Run Code Online (Sandbox Code Playgroud)
它说, TypeError: 'int' object is not iterable
我认为这是因为前两列显然是整数不浮动,但现在我甚至不确定它所指的是哪个int对象,因为它甚至不会只读取浮点数.我该如何loadtxt
工作?
相关:如何dtype = ?
通过谷歌解决问题,如何指定多列的格式.
我正在将 Django 站点从 MySQL 迁移到 PostgreSQL。数据量并不大,所以我采取了一个非常简单的方法:我只是使用了内置的 Django序列化和反序列化例程来创建 JSON 记录,然后将它们加载到新实例中,循环遍历对象,并将每个对象保存到新数据库中。
这工作得很好,有一个小问题:加载所有记录后,我IntegrityError
在加载旧记录后尝试添加新数据时遇到了一个问题。与 MySQL 自动增量 ID 字段等效的 Postgres 是一个串行字段,但是当显式指定 id 值时,串行字段的内部计数器不会增加。结果,Postgres 尝试从 1 开始对记录进行编号——已使用——导致违反约束。(这是 Django 中的一个已知问题,标记为wontfix。)
有很多与此相关的问题和答案,但似乎没有一个答案直接在 Django 的上下文中解决这个问题。这个答案给出了一个你需要运行来更新计数器的查询的例子,但我尽量避免在可能的情况下进行显式查询。我可以在保存之前简单地删除 ID 字段,让 Postgres 自己进行编号,但ForeignKey
在这种情况下,有些引用会被破坏。其他一切都运行得很漂亮!
如果 Django 提供一个例程来智能地处理任何边缘情况,那就太好了。(这不会修复错误,但它可以让开发人员以一致且正确的方式解决它。)我们真的只需要使用原始查询来修复这个问题吗?看起来太野蛮了。
如果真的没有这样的例程,我将简单地执行以下操作,直接运行上面链接的答案中建议的查询。但在这种情况下,我有兴趣了解这种方法的任何潜在问题,或者有关我可能做错了什么的任何其他信息。例如,我是否应该修改记录以使用 UUID,正如这表明的那样?
这是原始方法(经过编辑以反映我实际完成的工作的简化版本)。这与Pere Picornell的答案非常接近,但他对我来说看起来更健壮。
table = model._meta.db_table
cur = connection.cursor()
cur.execute(
"SELECT setval('{}_id_seq', (SELECT max(id) FROM {}))".format(table, table)
)
Run Code Online (Sandbox Code Playgroud) python ×8
numpy ×3
android ×1
django ×1
docker ×1
dockerfile ×1
effects ×1
heap ×1
inheritance ×1
input ×1
list ×1
metaclass ×1
mysql ×1
performance ×1
postgresql ×1
shuffle ×1
string ×1