小编use*_*262的帖子

Python C扩展 - 为什么使用关键字参数的方法强制转换为PyCFunction

我正在学习Python-C扩展,并且很困惑为什么使用关键字参数的方法必须强制转换为PyCFunctions.

我对PyCFunction的理解是它需要两个指向PyObjects的指针并返回一个指向PyObject的指针 - 例如

 PyObject* myFunc(PyObject* self, PyObject* args)
Run Code Online (Sandbox Code Playgroud)

如果我要使用一个使用关键字参数的函数,那么这个函数将使用三个指向PyObjects的指针并返回一个指向PyObject的指针 - 例如

 PyObject* myFunc(PyObject* self, PyObject* args, PyObject* keywordArgs)
Run Code Online (Sandbox Code Playgroud)

但是,当我创建模块函数数组时(对于一个名为'adder'的函数):

{ "adder", (PyCFunction)adder, METH_VARARGS | METH_KEYWORDS, "adder method" }
Run Code Online (Sandbox Code Playgroud)

工作良好.感觉就像我将一个浮点数转换为int并仍然使用浮点数的非整数部分.如果我没有看到这项工作,我会认为它不会起作用.我在这里不理解什么?

此外,我看到一些PyCFunctionWithKeywords的引用,它似乎有我认为我需要的函数签名,但我的编译器抱怨(发出警告)'不兼容的指针类型'.

是不是弃用了PyCFunctionWithKeywords?如果没有,是否有时间我应该/必须使用它?

python python-c-extension

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

Python interpteter在virtualenv中找不到模块,但是pip看到它并且不会安装

我正在尝试使用Nervana创建的virtualenv中的pytools模块作为他们的Neon深度学习包,但似乎无法找到pytools或pip它.当我进入virtualenv时,我看到了这种行为:

me@ARL--M6800:~/Downloads/neon$ source .venv/bin/activate
(.venv) me@ARL--M6800:~/Downloads/neon$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> import pytools
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  ImportError: No module named pytools
>>> 

>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.7/dist-packages', '/home/me/Downloads/neon',
 '/home/me/Downloads/neon/.venv/lib/python2.7',
 '/home/me/Downloads/neon/.venv/lib/python2.7/plat-x86_64-linux-gnu',
 '/home/me/Downloads/neon/.venv/lib/python2.7/lib-tk',
 '/home/me/Downloads/neon/.venv/lib/python2.7/lib-old', 
 '/home/me/Downloads/neon/.venv/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7', 
 '/usr/lib/python2.7/plat-x86_64-linux-gnu', 
 '/usr/lib/python2.7/lib-tk', 
 '/home/me/Downloads/neon/.venv/local/lib/python2.7/site-packages', 
 '/home/me/Downloads/neon/.venv/lib/python2.7/site-packages']



(.venv) me@ARL--M6800:~/Downloads/neon$ pip install pytools 
Requirement already satisfied (use --upgrade to upgrade): pytools in     
 /usr/local/lib/python2.7/dist-packages/pytools-2016.1-py2.7.egg …
Run Code Online (Sandbox Code Playgroud)

python egg pip virtualenv

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

如何反转 Plotly 颜色条的方向,使小值在顶部,大值在底部

我目前正在使用颜色条plotly来指示水下声纳接收器放置的深度。目前,颜色条如下所示:

深度颜色条

然而,我认为如果较大的值(表示更大的深度)应该位于底部,而较小的数字(表示较小的深度(即设备已放置在更靠近表面的位置)应该位于顶部)会更有意义,但不知道该怎么做。

我用来创建图形和颜色条的代码由两个字典组成(一个指定数据,另一个指定布局)。

import plotly.offline as off
import _tkinter

from matplotlib import pyplot as plt
from matplotlib import ticker
from matplotlib.dates import drange

...

data = [ 
   dict(
        lat = lat_array,
        lon = lon_array,
        marker = dict(
            color = log_depth_array,
            size = 6,
            colorbar = dict(
                title = 'Log Depth',
                thickness = 10,
                titleside = "right",
                outlinecolor = "rgba(68, 68, 68, 0)",
                ticks = "outside",
                ticklen = 3,
                showticksuffix = "last",
                ticksuffix = " log(meters, 10)",
                dtick = …
Run Code Online (Sandbox Code Playgroud)

python plotly plotly-python

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

何时对Python子进程模块使用Shell = True

似乎每当我尝试使用Python的子进程模块时,我发现我仍然不理解某些东西.目前,我试图从Python模块中加入3 mp4文件.

当我尝试

z ='MP4Box -cat test_0.mp4 -cat test_1.mp4 -cat test_2.mp4 -new test_012d.mp4'
subprocess.Popen(z,shell=True)
Run Code Online (Sandbox Code Playgroud)

一切正常.

当我尝试

z = ['MP4Box', '-cat test_0.mp4', '-cat test_1.mp4', '-cat test_2.mp4', '-new test_012d.mp4']
subprocess.Popen(z,shell=False)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Option -cat test_0.mp4 unknown. Please check usage
Run Code Online (Sandbox Code Playgroud)

我认为,因为shell=False我只需要提供一个列表,其中第一个元素是我想要运行的可执行文件,每个后续元素都是该可执行文件的参数.我是否误解了这个信念,或者是否有正确的方法来创建我想要使用的命令?

另外,有没有Shell=True在subprocess.Popen中使用的规则?到目前为止,我真正知道的(?)是"不要这样做 - 你可以将你的代码暴露给Shell注入攻击".为什么要Shell=False避免这个问题?使用'Shell = True`是否真的有优势?

python shell subprocess

4
推荐指数
2
解决办法
8274
查看次数

为什么matplotlib的带凹口的箱线图会自身折回?

我尝试使用matplotlib制作一个带槽的箱形图,但发现带槽的箱形往往会过度延伸,然后折回自身。当我进行常规箱线图绘制时,不会发生这种情况。

这可以通过以下代码以及生成的结果图看到:

import matplotlib.pyplot as plt

data = [[-0.056, -0.037, 0.010, 0.077, 0.082],
        [-0.014, 0.021, 0.051, 0.073, 0.079]]

# Set 2 plots with vertical layout (1 on top of other)
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)

ax1.boxplot(data, 1) #Notched boxplot
ax2.boxplot(data, 0) #Standard boxplot

ax1.set_ylim([-0.1, 0.1])
ax2.set_ylim([-0.1, 0.1])

plt.show()
Run Code Online (Sandbox Code Playgroud)

错误的缺口箱线图和标准。 箱形图

有谁知道我在做什么错以及如何解决这个问题?

python matplotlib

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

如何为apscheduler指定'logger'

我正在尝试学习如何使用Python的apscheduler包,但是它会定期抛出以下错误:

No handlers could be found for logger "apscheduler.scheduler"
Run Code Online (Sandbox Code Playgroud)

此消息似乎与计划作业中的错误相关联,例如,使用jobTester作为计划作业,以下代码在jobTester中使用未定义变量(nameStr0)给出以上错误消息:

from apscheduler.scheduler import Scheduler
from apscheduler.jobstores.shelve_store import ShelveJobStore
from datetime import datetime, timedelta
from schedJob import toyJob

def jobTester(nameStr):
    outFileName = nameStr0 + '.txt'
    outFile = open(outFileName,'w')
    outFile.write(nameStr)
    outFile.close()

def schedTester(jobList):
    scheduler = Scheduler()
    scheduler.add_jobstore(ShelveJobStore('example.db'),'shelve')
    refTime = datetime.now()

    for index, currJob in enumerate(jobList):
        runTime = refTime + timedelta(seconds = 15)
        jobName = currJob.name + '_' + str(index)
        scheduler.add_date_job(jobTester, runTime, name = jobName,
                           jobstore = 'shelve', args = [jobName])


    scheduler.start()
    stopTime …
Run Code Online (Sandbox Code Playgroud)

python scheduling scheduled-tasks

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

如何获得pandas的groupby命令以返回DataFrame而不是Series?

我不了解熊猫的groupby的输出。我从一个df0具有5个字段/列(邮政编码,城市,位置,人口,州)的DataFrame()开始。

 >>> df0.info()
 <class 'pandas.core.frame.DataFrame'>
 RangeIndex: 29467 entries, 0 to 29466
 Data columns (total 5 columns):
 zip      29467 non-null object
 city     29467 non-null object
 loc      29467 non-null object
 pop      29467 non-null int64
 state    29467 non-null object
 dtypes: int64(1), object(4)
 memory usage: 1.1+ MB
Run Code Online (Sandbox Code Playgroud)

我想获取每个城市的总人口,但是由于几个城市有多个邮政编码,所以我想使用groupby.sum如下:

  df6 = df0.groupby(['city','state'])['pop'].sum()
Run Code Online (Sandbox Code Playgroud)

但是,这返回了Series而不是DataFrame:

 >>> df6.info()
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/usr/local/lib/python2.7/dist-packages/pandas/core/generic.py", line 2672, in __getattr__
     return object.__getattribute__(self, name)
  AttributeError: 'Series' object has no attribute 'info'
 >>> …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

我误解了指针ref/deref,指针算术还是领先0确实对C检测相等的能力产生了影响?

我一直试图理解我用以下代码得到的错误

bytes2bits(p,q,pixels)
u_char *p, *q;
register u_int pixels;
{
  register u_char *r, a;
  register u_long *l;

   ...

switch (*l++) {
    case 0x00000000:    a = 0x00; break;
    case 0x00000001:    a = 0x10; break;
    case 0x00000100:    a = 0x20; break;
    case 0x00000101:    a = 0x30; break;

    case 0x00010000:    a = 0x40; break;
    case 0x00010001:    a = 0x50; break;
    case 0x00010100:    a = 0x60; break;
    case 0x00010101:    a = 0x70; break;

    case 0x01000000:    a = 0x80; break;
    case 0x01000001:    a = 0x90; break; …
Run Code Online (Sandbox Code Playgroud)

c hex pointers

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

为什么使用Python的多处理模块似乎不按顺序处理?

我正在尝试学习使用Python的多处理模块.作为第一次测试,我想我会同时运行四个15秒的过程.我写了这个模块,我称之为"multiPtest.py"::

import time
import timeit
import multiprocessing


def sleepyMe(napTime):
    time.sleep(napTime)
    print "Slept %d secs" % napTime

def tester(numTests):
    #Launch 'numTests' processes using multiProcessing module
    for _ in range(numTests):
        p = multiprocessing.Process(target=sleepyMe(15))
        p.start() #Launch an 'independent' process
        #p.join() ##Results identical with or without join

def multiTester():
    #Time running of 4 processes
    totTime = timeit.Timer('tester(4)', setup = 'from multiPtest import     tester').repeat(1,1)
    print "Total = ", totTime[0]
Run Code Online (Sandbox Code Playgroud)

但是,当我跑步时,我得到了这些结果:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing python-2.7 python-multiprocessing

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

为什么在PyCaffe中为ndarray分配ndarray会引发属性错误?

阅读Caffe教程(http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/00-classification.ipynb)时,我发现了以下声明:

net.blobs['data'].data[...] = transformer.preprocess('data',
                                  caffe.io.load_image
                                         (caffe_root + 'examples/images/cat.jpg'))
Run Code Online (Sandbox Code Playgroud)

它主要用于分配单个图像net.blobs['data'].data.

net.blobs['data'].data[...]是4D ndarray并transformer...返回3D ndarray,因此省略号用于在第0轴上复制3D数组.这让我觉得我应该能够重写代码以避免省略如下:

z3=transformer.preprocess('data', 
                           caffe.io.load_image
                                 (caffe_root + 'examples/images/cat.jpg'))

z4 = z3[np.newaxis,...]
net.blobs['data'].data = z4
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我明白了

>> net.blobs['data'].data = z4
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  AttributeError: can't set attribute
Run Code Online (Sandbox Code Playgroud)

即使,

net.blobs['data'].data[...] = z3
Run Code Online (Sandbox Code Playgroud)

工作良好.这对任何人都有意义吗?

我已经验证了变量的形状和类型如下:

>>> print net.blobs['data'].data.shape, z3.shape, z4.shape
(1, 3, 227, 227) (3, 227, 227) (1, 3, 227, 227)

>>> print type(net.blobs['data'].data),type(z3),type(z4)
<type 'numpy.ndarray'> <type 'numpy.ndarray'> <type …
Run Code Online (Sandbox Code Playgroud)

python attributes numpy caffe pycaffe

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

Python是否为元组取消了内存?

好吧,错误几乎肯定是我的,而不是Python,但我遇到了一些代码,可以用来显示为各种变量分配了多少内存,并看到了令人费解的结果.代码如下:

import sys

def show_sizeof(x, level=0):

    print "\t" * level, x.__class__, sys.getsizeof(x), x

    if hasattr(x, '__iter__'):
        if hasattr(x, 'items'):
            for xx in x.items():
                show_sizeof(xx, level + 1)
        else:
            for xx in x:
                show_sizeof(xx, level + 1)
Run Code Online (Sandbox Code Playgroud)

它似乎接受一个变量,然后返回它的类,为它分配的内存量及其值.如果对象是可迭代的,则此方法以递归方式调用该可迭代的所有成员.

现在当我尝试这个(在我的64位机器上):

>>> show_sizeof(('a', 213))
 <type 'tuple'> 72 ('a', 213)
    <type 'str'> 38 a
    <type 'int'> 24 213
Run Code Online (Sandbox Code Playgroud)

我看到为我的元组分配了72个字节,只使用了62(= 38 + 24).这是有道理的.但是,当我向我的元组添加另一个元素时,我看到了这个:

>>> show_sizeof(('a', 213, 1))
<type 'tuple'> 80 ('a', 213, 1)
     <type 'str'> 38 a
     <type 'int'> 24 213
     <type 'int'> 24 1 …
Run Code Online (Sandbox Code Playgroud)

python memory-management

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

caffe找不到libboost_system.so.166.0

我正在使用Boost 1.66在Ubuntu 17.04系统上安装caffe。我能够执行make all并且make test没有问题:

me@icvr1:~/PackageDownloads/caffe$ make all
make: Nothing to be done for 'all'.
me@icvr1:~/PackageDownloads/caffe$ make test
make: Nothing to be done for 'test'.
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试时make runtest,出现以下错误:

me@icvr1:~/PackageDownloads/caffe$ make runtest
.build_release/tools/caffe
.build_release/tools/caffe: error while loading shared libraries: libboost_system.so.1.66.0: cannot open shared object file: No such file or directory
Makefile:532: recipe for target 'runtest' failed
make: *** [runtest] Error 127
Run Code Online (Sandbox Code Playgroud)

现在,我知道libboost_system.so.1.66.0存在于/usr/local/lib中(我认为)是一个相当标准的位置:

me@icvr1:~/PackageDownloads/caffe$ ls /usr/local/lib/libboost_system*
/usr/local/lib/libboost_system.a  /usr/local/lib/libboost_system.so  /usr/local/lib/libboost_system.so.1.66.0
Run Code Online (Sandbox Code Playgroud)

并且,在caffe中Makefile.config/usr/local/lib …

boost shared-libraries caffe

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

如何从MATLAB结构数组中删除空字符串

我有一个带有字段的MATLAB结构数组image_name.有几个条目在哪里

x(n).image_name = []
Run Code Online (Sandbox Code Playgroud)

(即,struct数组的第n行有一个image_name空的)

我想通过尝试一些方法来删除它们

idx = [x.image_name] == []
x(idx) = [];
Run Code Online (Sandbox Code Playgroud)

但无法获取空字符串的索引.我尝试的每个变体都会产生错误.

如何找到空字符串的行索引,以便删除它们?

arrays string matlab struct matlab-struct

0
推荐指数
1
解决办法
738
查看次数