我正在学习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?如果没有,是否有时间我应该/必须使用它?
我正在尝试使用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) 我目前正在使用颜色条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的子进程模块时,我发现我仍然不理解某些东西.目前,我试图从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`是否真的有优势?
我尝试使用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的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) 我不了解熊猫的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) 我一直试图理解我用以下代码得到的错误
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) 我正在尝试学习使用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) 阅读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,但我遇到了一些代码,可以用来显示为各种变量分配了多少内存,并看到了令人费解的结果.代码如下:
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) 我正在使用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 …
我有一个带有字段的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)
但无法获取空字符串的索引.我尝试的每个变体都会产生错误.
如何找到空字符串的行索引,以便删除它们?
python ×10
caffe ×2
arrays ×1
attributes ×1
boost ×1
c ×1
egg ×1
hex ×1
matlab ×1
matplotlib ×1
numpy ×1
pandas ×1
pip ×1
plotly ×1
pointers ×1
pycaffe ×1
python-2.7 ×1
scheduling ×1
shell ×1
string ×1
struct ×1
subprocess ×1
virtualenv ×1