小编Pau*_*eeb的帖子

打印浮点值而不导致零

尝试使用格式说明符来打印一个小于1而没有前导零的浮点数.我想出了一些黑客,但我认为有一种方法可以在格式说明符中删除前导零.我在文档中找不到它.

问题

>>> k = .1337
>>> print "%.4f" % k
'0.1337'
Run Code Online (Sandbox Code Playgroud)

>>> print ("%.4f" % k) [1:]
'.1337'
Run Code Online (Sandbox Code Playgroud)

python string-formatting

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

将2d字典转换为numpy矩阵

我有一个像这样的字典:

d[id1][id2] = value
Run Code Online (Sandbox Code Playgroud)

例:

books["auth1"]["humor"] = 20
books["auth1"]["action"] = 30
books["auth2"]["comedy"] = 20
Run Code Online (Sandbox Code Playgroud)

等等..

每个"auth"键可以具有与它们相关联的任何"类型".键控项目的值是他们编写的书籍数量.

现在我想要的是以矩阵的形式转换它...类似于:

                    "humor"       "action"        "comedy"
      "auth1"         20            30               0
      "auth2"          0            0                20
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?谢谢

python numpy

19
推荐指数
2
解决办法
2万
查看次数

访问具有索引列表的项目列表

考虑从大型csv文件(80 MB)返回的大型命名项(第一行),其中可能存在间断间隔

name_line =  ['a',,'b',,'c' .... ,,'cb','cc']
Run Code Online (Sandbox Code Playgroud)

我正在逐行读取剩余的数据,我只需要处理具有相应名称的数据.数据可能看起来像

data_line =  ['10',,'.5',,'10289' .... ,,'16.7','0']
Run Code Online (Sandbox Code Playgroud)

我尝试了两种方法.一个是从读取的每一行弹出空列

blnk_cols = [1,3, ... ,97]
while data:
    ...
    for index in blnk_cols: data_line.pop(index)
Run Code Online (Sandbox Code Playgroud)

另一个是编译与L1名称关联的项目

good_cols = [0,2,4, ... ,98,99]   
while data:
    ...
    data_line = [data_line[index] for index in good_cols]
Run Code Online (Sandbox Code Playgroud)

在我使用的数据中肯定会有更好的线条然后坏线虽然它可能高达一半和一半.

我使用cProfile和pstats包来确定我速度最弱的链接,这表明pop是当前最慢的项目.我切换到列表comp,时间几乎加倍.

我想象一种快速的方法是切片检索只有好数据的数组,但对于具有交替空白和良好数据的文件来说这会很复杂.

我真正需要的是能够做到的

data_line = data_line[good_cols]
Run Code Online (Sandbox Code Playgroud)

有效地将索引列表传递到列表中以获取这些项目.现在我的程序在大约2.3秒内运行10 MB文件,弹出帐户大约0.3秒.

是否有更快的方式来访问列表中的某些位置.在C中,它只是取消引用指向数组中正确索引的指针数组.

添加:读取前的文件中的name_line

a,b,c,d,e,f,g,,,,,h,i,j,k,,,,l,m,n,
Run Code Online (Sandbox Code Playgroud)

读取和拆分后的name_line(",")

['a','b','c','d','e','f','g','','','','','h','i','j','k','','','','l','m','n','\n']
Run Code Online (Sandbox Code Playgroud)

python indexing list

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

使用pylab绘制从Scipy返回的图像

我正在努力从MatLab迁移到Sage中的python.所以我使用这些命令,我​​在Sage中遇到了这个错误:

from scipy import misc

l = misc.lena();

import pylab as pl

pl.imshow(l)
Run Code Online (Sandbox Code Playgroud)

错误或消息(我不知道)是:

matplotlib.image.AxesImage object at 0xb80198c
Run Code Online (Sandbox Code Playgroud)

它没有显示任何图像

python matplotlib

9
推荐指数
2
解决办法
7252
查看次数

控制 python 导入以减少大小和开销

我创建了许多个人库来帮助我进行日常编码。最佳实践是将导入放在 python 程序的开头。但是假设我导入了我的库,甚至只是从库中导入了一个函数或类。所有模块都被导入(即使这些模块用于其他未使用的类或函数)。我认为这会增加程序的开销?

一个例子。我有一个名为 pytools 的库,它看起来像这样

import difflib

def foo():
    # uses difflib.SequenceMatcher

def bar():
    # benign function ie
    print "Hello!"
    return True

class foobar:
    def __init__():
        print "New foobar"
    def ret_true():
        return True
Run Code Online (Sandbox Code Playgroud)

函数 foo 使用 difflib。现在说我正在编写一个需要使用 bar 和 foobar 的新程序。我可以写

import pytools
...
item = pytools.foobar()
vals = pytools.bar()
Run Code Online (Sandbox Code Playgroud)

或者我可以做

from pytools import foobar, bar
...
item = foobar()
vals = bar()
Run Code Online (Sandbox Code Playgroud)

这两种选择是否会减少开销或排除 foo 的导入及其对 difflib 的依赖?如果 difflib 的导入是在 foo 函数内部呢?

我遇到的问题是,将简单程序转换为仅使用我的库中的一两个类或函数的可执行文件时,可执行文件最终为 50 mb 左右。

我已经阅读了 py2exe 的优化大小页面,并且可以使用它的一些建议进行优化。 …

python size import optimization

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

Try-finally 装饰器清理 python 对象

似乎对象清理是我在编程期间遇到的一个非常常见的问题。迄今为止,我一直with按照此处的建议使用该语句

我今天有另一个想法,对我来说似乎更优雅(因为它不需要最终用户的 with 语句)。这个想法是对某种类型的对象使用 try-finally 装饰器(有一个清理方法)。

只是想知道这种做法是否有问题,或者是否有更好的方法。我不喜欢我的许多类需要使用 with 语句进行初始化,但我也想确保我的对象正确关闭。这是一个简短的例子。

def cleanme(func):
    def _decorator(self, *args, **kwargs):
        try:
            func(self, *args, **kwargs)
        finally:
            self._cleanup()

    return _decorator


class IObject(object):
    def __init__(self):
        self.file_name = "some_file.txt"
        self._file_object = None
        self._cleaned = True

    @cleanme
    def run(self):
        self._connect()
        while True:
            # do some things over a long period
            pass

    def _connect(self):
        self._file_object = open(self.file_name)
        self._cleaned = False

    def _cleanup(self):
        if not self._cleaned:
            self._file_object.close()
            self._cleaned = True
Run Code Online (Sandbox Code Playgroud)

python class decorator resource-cleanup python-2.7

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

OpenCV:何时使用GridAdaptedFeatureDetector?

我正在尝试根据描述符制作探测器.我正在使用OpenCV,我已经看到有许多功能类型和描述符类型,以及匹配器类型.更多我还看到,对于要素类型,可以使用网格或金字塔等组合类型.

我没有找到对它们的一个很好的解释(金字塔除外,它说这对于非固有缩放的探测器来说是好的).我希望对每种类型和每种组合(特征描述符 - 匹配器)进行小的描述,以便创建一个想法而不是创建详尽的工作来搜索和验证每个可能的组合.

有谁知道更多关于此的信息?

c++ python opencv image-processing feature-detection

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

使用嵌套值项交换键和值

我有一个标准名称列表

standard = ["Richard","Robert","Nicolas"]
Run Code Online (Sandbox Code Playgroud)

和一个别名字典(在这种情况下是昵称)

aliases = {standard[0]:["Richard","Rick","Dick","Rich"],
           standard[1]:["Robert","Roberto","Bob"],
           standard[2]:["Nicolas","Nick","Nic"]}
Run Code Online (Sandbox Code Playgroud)

我想创建一个新的字典,我可以把任何别名作为一个键,它将返回标准名称AKA交换键和值

我到目前为止唯一的猜测就是这个

t = {}
aliases = [t.update(zip(v,[k]*len(v))) for k,v in aliases.items()]
aliases = t
Run Code Online (Sandbox Code Playgroud)

是否有一个更整洁或更可读的方式来执行此操作(id不喜欢临时字典t).

python dictionary nested

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

类声明和类实例的操作

我正在按照"如何像计算机科学家那样思考"来学习python,并且在理解类和对象章节时遇到了一些问题.

那里的一个练习是写一个名为moveRect的函数,它接受一个Rectangle和两个名为dx&dy的参数.它应该通过将dx添加到角的x坐标和dy到角的y坐标来改变矩形的位置.

现在,我不确定我写的代码是否正确.那么,让我告诉你我想做什么,你可以告诉我,我做得对吗?

首先我创建了一个类Rectangle然后我创建了一个实例并输入了细节,例如坐标x和y的值以及矩形的宽度和高度.

所以,这是我之前的代码:

class Rectangle:
    pass
rect=Rectangle()
rect.x=3.0
rect.y=4.0
rect.width=50
rect.height=120

def moveRect(Rectangle,dx,dy):
    Rectangle.x=Rectangle.x + dx
    Rectangle.y=Rectangle.y + dy

dx=raw_input("enter dx value:")
dy=raw_input("enter dy value:")

moveRect(Rectangle,dx,dy)
Run Code Online (Sandbox Code Playgroud)

但是当我运行这段代码时,它给了我一个属性错误,并且:类Rectangle没有属性x

因此,我将以下行移动到moveRect函数中

rect=Rectangle()
rect.x=3.0
rect.y=4.0
rect.width=50
rect.height=120
Run Code Online (Sandbox Code Playgroud)

因此代码成了:

class Rectangle:
    pass


def moveRect(Rectangle,dx,dy):
    Rectangle.x=Rectangle.x + dx
    Rectangle.y=Rectangle.y + dy
    rect=Rectangle()
    rect.x=3.0
    rect.y=4.0
    rect.width=50
    rect.height=120


dx=raw_input("enter dx value:")
dy=raw_input("enter dy value:")

moveRect(Rectangle,dx,dy)
Run Code Online (Sandbox Code Playgroud)

但是,这段代码仍然给我一个错误.那么,这段代码实际上有什么问题呢?目前,我觉得好像我使用反复试验编写了这段代码,并在看到错误时改变了部分.我想正确理解这是如何运作的.所以,请详细说明一下.

这本书"如何像计算机科学家一样思考"并未在第12章中介绍init,因此我需要在不使用init的情况下完成.

python

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

在with语句中覆盖文件引用变量

如果这会导致任何不良行为,我很好奇.我运行了一个测试用例并没有出现任何错误,所以我认为它没问题(虽然可能不是很好的做法).只是想知道python如何处理我认为应该存在的问题?

with open("somefile.txt","r") as fileinfo:
    fileinfo = fileinfo.readlines()

print fileinfo
Run Code Online (Sandbox Code Playgroud)

我认为覆盖"fileinfo"会导致退出with语句的问题(引发一些关于无法将.close()列表的错误).with语句是否保留文件引用的本地副本?谢谢!

python scope with-statement

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

不需要的整数的测试列表

我有一份清单

list1 = [0,1,0,0]
Run Code Online (Sandbox Code Playgroud)

如何创建打印"失败!"的if语句 如果列表中有"1"但是否则继续?

其他例子

list2 = [1,1,0,0]
list3 = [0,0,0,0]
Run Code Online (Sandbox Code Playgroud)

列表中可以有更多或更少的整数.

python for-loop if-statement list

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