小编sen*_*rle的帖子

Python中的"Eratosthenes的真正筛选" - 为什么heapq比dict慢?

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 heap performance sieve-of-eratosthenes

9
推荐指数
1
解决办法
629
查看次数

在Python中创建没有变量"x in"(例如for range)的生成器表达式或列表推导

在Python中,有没有办法在没有"x in"变量的情况下编写这个列表理解(因为它完全没用)?同样适用于生成器表达式.我怀疑这种情况经常发生,但我偶然发现了几次,很想知道.

这是一个例子:

week_array = ['']*7
four_weeks = [week_array[:] for x in range(4)]
Run Code Online (Sandbox Code Playgroud)

(也许,是否有更优雅的方式来构建它?)

python list-comprehension generator-expression

8
推荐指数
1
解决办法
2182
查看次数

android放大镜效果

我想知道Widget是否有可能在用户设置的任何背景上创建一个可用作放大镜的区域.

提前致谢!

android effects

7
推荐指数
1
解决办法
1307
查看次数

检查集合中的值是否在python中的numpy数组中

我想检查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)

python numpy

7
推荐指数
1
解决办法
5964
查看次数

在python中将基类添加到现有对象

我有几个不同种类的对象(不同的函数名称,不同的签名),我对它们进行修补,以便有一种从不同函数访问它们的通用方法.简而言之,有一个调度程序可以获取我想要修补的对象,并根据它调用不同修补程序的对象类型.修补程序将向对象添加方法:

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)

随着程序变得越来越复杂,围绕对象(或对象类)的包装似乎更好.一些修补程序共享公共代码或相互关联.但我不控制对象创建,也不控制类创建.我只得到了这些物品.即使我能做到这一点,我只想包装(或修补)某些对象,而不是所有对象.

一种解决方案可能是为现有对象添加基类,但我不确定这是多么可维护和安全.还有其他解决方案吗?

python inheritance monkeypatching metaclass

7
推荐指数
2
解决办法
6838
查看次数

统一调整5千兆字节的numpy数据

我正在训练一个神经网络,其中大约有5千兆字节的数据存储为numpy数组.数据被分成100000行的块,我以随机顺序对所有块进行了六个周期的训练.不幸的是,网络已经开始过度适应.我认为它仍然有能力更紧密地拟合数据; 我怀疑每个块内的内部规则开始相互矛盾,我需要更彻底地调整数据,以便它可以训练不同的组合.我想在获得更多训练数据之前尝试这个.

有谁知道一个很好的方法来生成360万(非常长)的numpy数据行的新排列?我想过使用这些技术之一,但是使用这些数据编写numpy.savetxt产生令人难以置信的巨大文件,我无法告诉如何以npy有助于解决此问题的方式处理标准文件中的各个行.

现在,我最好的想法是在数据中创建配对索引的排列(c, r),其中c选择一个块并r从该块中选择一行.我可以将每一行存储在一个新的预分配数组中,然后保存它.但我想知道是否有一个不那么可怕的I/O限制解决方案.是否有一些原则性的方法可以将随机对的块组合在一起,直到你得到一个统计上独立于起始排列的排列?

python numpy shuffle machine-learning

7
推荐指数
1
解决办法
1625
查看次数

python数字列表错误地转换为字符串

出于某种原因,当我做代码时......

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']

谢谢!

python string list

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

Docker中的MySQL冻结在root密码配置中

我有下一个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吗?我不想自动安装它

mysql docker dockerfile

6
推荐指数
2
解决办法
6467
查看次数

numpy.loadtxt给出"不可迭代"的错误

我正在尝试使用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 = ?通过谷歌解决问题,如何指定多列的格式.

python numpy input

5
推荐指数
2
解决办法
5281
查看次数

Django 是否提供任何内置方式来更新 PostgreSQL 自动增量计数器?

我正在将 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 django postgresql

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