小编MSe*_*ert的帖子

包装np.arrays __pow__方法

我只是在重新审视我的一些代码来改善性能并且对一些奇怪的事情感到困惑:

a = np.linspace(10,1000,1000000).reshape(1000,1000)

%timeit np.square(a)
100 loops, best of 3: 8.07 ms per loop

%timeit a*a
100 loops, best of 3: 8.18 ms per loop

%timeit a**2
100 loops, best of 3: 8.32 ms per loop
Run Code Online (Sandbox Code Playgroud)

好吧,当使用power-operator(**)时似乎有一些开销,但是否则它们看起来完全相同(我猜NumPy正在这样做)但是它很奇怪:

In [46]: %timeit np.power(a, 2)
10 loops, best of 3: 121 ms per loop
Run Code Online (Sandbox Code Playgroud)

所以没有问题,但是对于魔法战队有一个后备似乎有点不一致,但对于UFUNC则没有.但后来我感兴趣,因为我使用了很多次幂:

%timeit a*a*a
100 loops, best of 3: 18.1 ms per loop

%timeit a**3
10 loops, best of 3: 121 ms per loop

%timeit np.power(a, 3) …
Run Code Online (Sandbox Code Playgroud)

python performance numpy

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

用你班级的 __mul__ 覆盖其他 __rmul__

在Python中,您的类的方法是否可以__rmul__覆盖另一个类的__mul__方法,而不对另一个类进行更改?

出现这个问题是因为我正在为某种类型的线性运算符编写一个类,并且我希望它能够使用乘法语法来乘以 numpy 数组。这是说明该问题的最小示例:

import numpy as np    

class AbstractMatrix(object):
    def __init__(self):
        self.data = np.array([[1, 2],[3, 4]])

    def __mul__(self, other):
        return np.dot(self.data, other)

    def __rmul__(self, other):
        return np.dot(other, self.data)
Run Code Online (Sandbox Code Playgroud)

左乘法效果很好:

In[11]: A = AbstractMatrix()
In[12]: B = np.array([[4, 5],[6, 7]])
In[13]: A*B
Out[13]: 
array([[16, 19],
       [36, 43]])
Run Code Online (Sandbox Code Playgroud)

但右乘默认为np.ndarrays 版本,它将数组分割并逐个元素执行乘法(这不是我们想要的):

In[14]: B*A
Out[14]: 
array([[array([[ 4,  8],
       [12, 16]]),
        array([[ 5, 10],
       [15, 20]])],
       [array([[ 6, 12],
       [18, 24]]),
        array([[ 7, 14],
       [21, 28]])]], dtype=object)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我怎样才能让它 …

python numpy

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

我如何只打印每5行

我有一个文本文件("name_data.txt"),其中包含以下内容:

name: Kelo
family name: Lam
location: Asia
members: Kelo, Kiko, Jil

name: Miko
family name: Naiton
location: Japan
members: Miko,Kayati 
Run Code Online (Sandbox Code Playgroud)

文本文件使用相同的模式(名称,姓氏,位置,成员)

我想要打印出第一行,然后每隔5行打印一次,所以我只会在开头打印带有"name"的行.然后我想要一个名单列表

我希望我的输出是:

["Kelo","Miko"]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经得到了(虽然这是错的):

name_data= load_local_file('name_data.txt',ignore_header=False,delimiter='\t')


def __init __(name_reader): 

    names=list()  
    count=0  
    name_line=5  
    line_number=0  

    for name in name_data:

        if line_number<5:  

            line_number +=1  

        if line_number ==5: 

            names.append(line_number)  
Run Code Online (Sandbox Code Playgroud)

python printing lines

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

为什么检查isinstance(某事,Mapping)这么慢?

我最近比较的性能collections.Countersorted进行比较检查(如果有的迭代包含具有相同数量相同的元素),并同时的大迭代表现Counter一般优于sorted它的短iterables慢得多.

使用line_profiler的瓶颈似乎是isinstance(iterable, collections.Mapping)在-check Counter.update:

%load_ext line_profiler  # IPython
lst = list(range(1000))
%lprun -f Counter.update Counter(lst)
Run Code Online (Sandbox Code Playgroud)

给我:

Timer unit: 5.58547e-07 s

Total time: 0.000244643 s
File: ...\lib\collections\__init__.py
Function: update at line 581

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
   581                                               def update(*args, **kwds):
   601         1            8      8.0      1.8          if not args:
   602                                                       raise TypeError("descriptor 'update' of 'Counter' object "
   603                                                                       "needs an argument")
   604 …
Run Code Online (Sandbox Code Playgroud)

python python-internals

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

在python列表中计算日期的最佳/最快方法

我有一个日期列表,目标是计算每个日期的出现次数,同时保持它们在原始列表中的显示顺序.请考虑以下示例:

该列表only_dates如下所示:

[datetime.date(2017, 3, 9), datetime.date(2017, 3, 10), datetime.date(2017, 3, 10), datetime.date(2017, 3, 11)]
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用groupby:

import itertools
day_wise_counts = [(k, len(list(g))) for k, g in itertools.groupby(only_dates)]
print(str(day_wise_counts))
Run Code Online (Sandbox Code Playgroud)

这打印

[(datetime.date(2017, 3, 10), 1), (datetime.date(2017, 3, 9), 1), (datetime.date(2017, 3, 10), 1), (datetime.date(2017, 3, 11), 1)]
Run Code Online (Sandbox Code Playgroud)

我理解这种情况正在发生,因为最终每个日期对象在分组时被视为不同的日期对象.

我期待输出为:

[(datetime.date(2017, 3, 9), 1), (datetime.date(2017, 3, 10), 2), (datetime.date(2017, 3, 11), 1)]
Run Code Online (Sandbox Code Playgroud)

我不一定在寻找元组列表.只要保持原始日期顺序,字典输出也就足够了.(OrderedDict也许).

我怎样才能做到这一点?

更新:有可能建议多种方法都能正常运行.但我应该提到我将为大量数据执行此操作.因此,如果您的解决方案在运行时间方面是最佳的,那就太好了.如果可以,请相应地编辑您的答案/评论.

更新2:数据大小可以达到100万行.

python datetime list counting python-3.x

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

cython_bbox.so:未定义符号:_Py_ZeroStruct

我尝试执行所有这些步骤,因为我希望在 linux 上使用不同版本的 python 3.5 来运行此示例中的代码 https://docs.microsoft.com/en-us/cognitive-toolkit/Object-Detection-using-Fast-卷积神经网络

如果你需要一个不同的版本,你可以按照以下步骤编译它:

git clone --recursive https://github.com/rbgirshick/fast-rcnn.git
cd $FRCN_ROOT/lib
make
python setup.py build_ext --inplace.
copy the generated cython_bbox and cython_nms binaries from 
$FRCN_ROOT/lib/utils to $CNTK_ROOT/Examples/Image/Detection/FastRCNN/fastRCNN/utils
**Error**
Traceback (most recent call last):
  File "C1_DrawBboxesOnImages.py", line 10, in <module>
    from cntk_helpers import *
  File "/home/tftuts/Desktop/tensorflow/CNTK-master/Examples/Image/Detection/FastRCNN/cntk_helpers.py", line 13, in <module>
    from fastRCNN.nms import nms as nmsPython
  File "/home/tftuts/Desktop/tensorflow/CNTK-master/Examples/Image/Detection/FastRCNN/fastRCNN/__init__.py", line 7, in <module>
    from .imdb import imdb
  File "/home/tftuts/Desktop/tensorflow/CNTK-master/Examples/Image/Detection/FastRCNN/fastRCNN/imdb.py", line 16, in <module>
    from .utils.cython_bbox import bbox_overlaps
ImportError: /home/tftuts/Desktop/tensorflow/CNTK-master/Examples/Image/Detection/FastRCNN/fastRCNN/utils/cython_bbox.so: …
Run Code Online (Sandbox Code Playgroud)

python python-3.x tensorflow cntk

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

使用os.listdir仅显示目录

如何通过os.listdir指定哪个目录来通过,只能将python带到输出目录raw_input

是)我有的:

file_to_search = raw_input("which file to search?\n>")

dirlist=[]

for filename in os.listdir(file_to_search):
    if os.path.isdir(filename) == True:
        dirlist.append(filename)

print dirlist
Run Code Online (Sandbox Code Playgroud)

现在,如果我输入(通过raw_input)当前工作目录,这实际上是有效的.但是,如果我输入其他内容,列表将返回空.我试图划分并克服这个问题,但是每个代码片都按预期工作.

python raw-input os.path

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

将两个numpy数组转换为dataframe

我想将两个numpy数组转换为DataFrame包含两列的数组.第一个numpy数组'images'是有形的102, 1024.第二个numpy数组'label'是有形的(1020, )

我的核心代码是:

images=np.array(images)
label=np.array(label)
l=np.array([images,label])
dataset=pd.DataFrame(l)
Run Code Online (Sandbox Code Playgroud)

但事实证明这是一个错误说:

ValueError: could not broadcast input array from shape (1020,1024) into shape (1020)
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能将这两个numpy数组转换为一个数据帧中的两列?

python arrays numpy dataframe pandas

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

迭代其元素时更新集合

当我尝试在迭代其元素时更新集合时,它的行为应该是什么?

我在各种场景中尝试过它并且它不会迭代迭代开始后添加的元素以及迭代期间删除的元素.如果我在迭代期间删除并放回任何元素,则会考虑该元素.什么是确切的行为,它是如何工作的?

这将打印字符串的所有排列:

def permutations(s):
    ans = []
    def helper(created, remaining):
        if len(created) == len(s):
            ans.append(''.join(created))
            return
        for ch in remaining:
            remaining.remove(ch)
            created.append(ch)
            helper(created, remaining)
            remaining.add(ch)
            created.pop()
    helper([], set(s))
    return ans
Run Code Online (Sandbox Code Playgroud)

这里的行为是不可预测的,有时e是打印的,有时则不是:

ab = set(['b','c','d'])
x = True
for ch in ab:
    if x:
        ab.remove('c')
        ab.add('e')
        x = False
    print(ch)
Run Code Online (Sandbox Code Playgroud)

在这里,我总是'c'只看到一次.即使第一个字符是'c':

ab = set(['b','c','d'])
x = True
for ch in ab:
    if x:
        ab.remove('c')
        ab.add('c')
        x = False
    print(ch)
Run Code Online (Sandbox Code Playgroud)

以及实现上述功能相同目标的另一种方法:

def permwdups(s):
    ans = …
Run Code Online (Sandbox Code Playgroud)

python iteration set python-internals

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

将先前字段中的字段添加到 NamedTuple

假设我想存储一些有关会议日程的信息,包括演示时间和暂停时间。我可以在NamedTuple.

from typing import NamedTuple

class BlockTime(NamedTuple):
    t_present: float
    t_pause: float
Run Code Online (Sandbox Code Playgroud)

但是,如果我还想存储每个块将占用多少t_each = t_pause + t_present,我不能只将其添加为属性:

class BlockTime(NamedTuple):
    t_present: float
    t_pause: float
    # this causes an error
    t_each = t_present + t_pause
Run Code Online (Sandbox Code Playgroud)

在 Python 中执行此操作的正确方法是什么?如果我创建一个__init__(self)方法并将其作为实例变量存储在那里,但它是可变的。

python namedtuple python-3.x

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