分析我正在做的一些计算工作向我展示了我的程序中的一个瓶颈是基本上这样做的功能(np是numpy,sp是scipy):
def mix1(signal1, signal2):
spec1 = np.fft.fft(signal1, axis=1)
spec2 = np.fft.fft(signal2, axis=1)
return np.fft.ifft(spec1*spec2, axis=1)
Run Code Online (Sandbox Code Playgroud)
两个信号都具有形状(C, N),其中C是数据集的数量(通常小于20),并且N是每组中的样本数(大约5000).每个集合(行)的计算完全独立于任何其他集合.
我认为这只是一个简单的卷积,所以我试着用以下代码替换它:
def mix2(signal1, signal2):
outputs = np.empty_like(signal1)
for idx, row in enumerate(outputs):
outputs[idx] = sp.signal.convolve(signal1[idx], signal2[idx], mode='same')
return outputs
Run Code Online (Sandbox Code Playgroud)
......只是为了看看我是否得到了相同的结果.但我没有,我的问题是:
mix1()?(我意识到mix2可能不会更快,但它可能是并行化的一个很好的起点.)
这是我用来快速检查这个的完整脚本:
import numpy as np
import scipy as sp
import scipy.signal
N = 4680
C = 6
def mix1(signal1, signal2):
spec1 = …Run Code Online (Sandbox Code Playgroud) 我希望看到一小段但完整的代码片段会导致Clang的静态分析器抱怨.我的动机主要是我试图让它在我的PIC32代码上工作,我需要一种方法来区分"所有代码都很好"和"它实际上没有做任何事情".这也是一种好奇心,因为我自己似乎无法想出一个简单的例子.
C89/ANSI或C99很好,理想情况下我希望看到它发现一个简单的内存泄漏.我的用法是
clang --analyze test.c
Run Code Online (Sandbox Code Playgroud) 说我有以下HTML:
<figure>
<img alt="Sun" src="sun.gif" width="256" height="256" />
<figcaption>The Sun - a sinister and destructive force. Image from
the SOHO research facility.</figcaption>
</figure>
Run Code Online (Sandbox Code Playgroud)
如果我希望文本换行到图像的宽度,我需要这个CSS:
figure {
display: table;
width: 1px;
}
Run Code Online (Sandbox Code Playgroud)
如果我希望图像"响应" - 也就是说,不比视口大 - 我也需要这个CSS:
img {
max-width: 100%;
}
Run Code Online (Sandbox Code Playgroud)
但结合这两个导致一个可怕的混乱!现在,img父母的宽度设置明确,max-width导致整个数字真的很小(虽然并不完全1px).
因此,它是能够使用CSS(2或3),以实现二者的图像标题缠绕以不宽于该图像和图像不大于视口宽?
我希望以下片段给我一个迭代器,从两个输入迭代的笛卡尔乘积产生对:
$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import itertools
>>> one = xrange(0, 10**9)
>>> two = (1,)
>>> prods = itertools.product(one, two)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
MemoryError
Run Code Online (Sandbox Code Playgroud)
相反,我得到了一个MemoryError.但我认为itertools.product没有将中间结果存储在内存中,那么是什么导致了MemoryError?
我试图用Sphinx记录一个Python项目,但是我在将autodoc扩展与namedtuple生成的类组合时遇到了麻烦.
在一份文件中gammatone.rst,我有:
:mod:`gammatone` -- gammatone filterbank toolkit
================================================
.. automodule:: gammatone
:members:
.. automodule:: gammatone.coeffs
:members:
Run Code Online (Sandbox Code Playgroud)
在我gammatone/coeffs.py,我有:
from collections import namedtuple
ERBFilterCoeffs = namedtuple(
'ERBFilterCoeffs', # Most parameters omitted
[
'A0',
'gain',
])
Run Code Online (Sandbox Code Playgroud)
生成的代码namedtuple包括Sphinx autodoc模块选择并包含的非常通用的文档字符串.我宁愿自己正确地记录课程,而不是放弃autodoc模块的其余部分.
我在课前尝试过这样的东西:
"""
.. class:: ERBFilterCoeffs(A0, gain)
:param A0: A0 coefficient
:param gain: Gain coefficient
Magic coefficients.
"""
Run Code Online (Sandbox Code Playgroud)
...但它没有出现在生成的文档中.将它放在类之后导致它嵌套在泛型类文档下面,而不是替换它.
我如何简单地告诉Sphinx(和autodoc扩展程序)使用我的文档ERBFilterCoeffs而不是由类生成的文档namedtuple?
我想使用Python 2.7从-1到1之间的浮点值数组生成一个24位WAV格式的音频文件.我不能使用scipy.io.wavfile.write,因为它只支持16或32位.Python自己的wave模块的文档没有指定它采用的数据格式.
那么在Python中可以这样做吗?
我正在使用Windows XP上的一体化安装程序中的 Python 2.6和PyGTK 2.22.6 ,尝试为我的应用程序构建单文件可执行文件(通过py2exe).
我的问题是,当我将我的应用程序作为脚本运行时(即,没有内置到.exe文件中,就像一个松散的.py文件集合),它使用看起来像本机的Windows主题,但是当我运行构建的exe时,我看到默认GTK主题.
我知道可以通过将一堆文件复制到distpy2exe创建的目录中来解决这个问题,但我读过的所有内容都涉及手动复制数据,而我希望这是构建过程的自动部分.此外,关于该主题的所有内容(包括FAQ)都已过时 - PyGTK现在保留其文件C:\Python2x\Lib\site-packages\gtk-2.0\runtime\...,只是复制lib和etc目录不能解决问题.
我的问题是:
我希望能够以编程方式找到GTK运行时数据,setup.py而不是硬编码路径.我该怎么做呢?
我需要包含哪些最小资源?
更新:我可能通过反复试验几乎回答了#2.要使"wimp"(即MS Windows)主题起作用,我需要以下文件:
runtime\lib\gtk-2.0\2.10.0\engines\libwimp.dll
runtime\etc\gtk-2.0\gtkrc
runtime\share\icons\*
runtime\share\themes\MS-Windows
Run Code Online (Sandbox Code Playgroud)
...没有runtime前缀,但具有相同的目录结构,直接坐在distpy2exe生成的目录中.但是,在什么地方2.10.0来的,因为gtk.gtk_version是(2,22,0)?
我正在尝试调试由clangwith 检测到的内存错误asan,但是错过了valgrind.但我不能得到我的clang构建二进制文件给我任何有用的调试信息.我可以用一个简短的测试程序证明这一点:
#include <stdlib.h>
#include <string.h>
int main(void)
{
char *a = malloc(8);
memset(a, 0, 9);
free(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(显然这个错误会被接收valgrind,它纯粹是为了显示问题clang.)
我用Clang 3.4-1ubuntu1编译它是这样的:
clang -fsanitize=address -fno-sanitize-recover -o test -O0 -g test.c
Run Code Online (Sandbox Code Playgroud)
果然,./test中止,我看到一些调试信息:
==3309==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60200000eff8 at pc 0x43e950 bp 0x7fff168724f0 sp 0x7fff168724e8
WRITE of size 9 at 0x60200000eff8 thread T0
#0 0x43e94f (/home/jason/Code/astest/test+0x43e94f)
#1 0x7faa43c47de4 (/lib/x86_64-linux-gnu/libc.so.6+0x21de4)
#2 0x43e6ac (/home/jason/Code/astest/test+0x43e6ac)
0x60200000eff8 is …Run Code Online (Sandbox Code Playgroud) 我有一个C源/头文件,是一个更大的项目的一部分.我想将其作为一个单元进行测试,与实际项目无关.虽然可以通过创建一个不同的新项目在C中执行此操作main(),但我想看看我是否可以使用Python(3)及其框架(例如,nose)来加速测试的构建,使用现有的报告框架等
我的印象是我可以用CFFI做到这一点.这是一个示例C文件:
// magic.c
// Implementation of magic.
int add(int a, int b)
{
return a;
}
Run Code Online (Sandbox Code Playgroud)
标题:
// magic.h
// Add two numbers (where a + b is not greater than INT_MAX).
int add(int a, int b);
Run Code Online (Sandbox Code Playgroud)
这是一个只是尝试编译它的脚本,所以我可以调用一些函数:
# cffi_test.py
import cffi
INCLUDE_DIRS = ('.',)
SOURCES = ('magic.c',)
ffi = cffi.FFI()
ffi.set_source(
'_magic_tests',
'#include "magic.h"',
include_dirs = INCLUDE_DIRS,
sources = SOURCES,
libraries = [],
)
ffi.compile()
Run Code Online (Sandbox Code Playgroud)
最终,我计划在进行一系列单元测试之前将其作为设置的一部分.纯Python函数test_add()将add()通过ffi对象调用并检查C函数的结果,该对象是在测试设置中构造的.
上面的脚本似乎有效; 它运行没有错误,它创建一个_magic_tests.c文件,一个 …
我正在使用HiTech PICC32为PIC32MX编写固件.我想避免的一个问题是,由于大多数引脚都有多个名称(例如AN0 = RB0 = CN2 = PGED1),我或其他人可能会意外地使用RB0而没有意识到AN0已被使用.(这实际上可能是灾难性的,因为错误配置模拟/数字引脚会导致过量的电流消耗和基本烟雾的释放.)
除了全面记录每个使用的引脚外,我还想知道是否有一种快速的方法可以在编码层面解决这个问题.我想要一个人们(主要是我自己)可以使用的宏,比如CLAIM_PIN(58),如果它运行两次会发出警告或错误.
(我不惜一切代价想要这个,如果唯一可能的解决方案太可怕或者不可维护,那么我会忘记它,只是为了迸发出眼泪或让自己着火或者其他东西而声名鹊起.我也看到了这个问题关于宏生成宏,它排除了这一点.)
我应该澄清一下:代码是用多个编译单元编写的(至少,我认为这就是这个短语的含义).我有一个.h/.c文件用于我的A2D代码,类似于SPI,同样适用于只使用某些I/O端口的各种外设.空间不是真正的问题,我的代码在PIC32MX上留下了足够的空间; 我也可以使用另一个__DEBUG标志来删除引脚检查代码以供最终使用.