我在我的python程序中使用cython进行相关计算.我有两个音频数据集,我需要知道它们之间的时差.基于开始时间切割第二组,然后滑过第一组.有两个for循环:一个滑动集合,内循环计算该点的相关性.这种方法效果很好,而且足够准确.
问题是使用纯python这需要一分多钟.使用我的cython代码,大约需要17秒.这仍然太多了.您是否有任何提示如何加速此代码:
import numpy as np
cimport numpy as np
cimport cython
FTYPE = np.float
ctypedef np.float_t FTYPE_t
@cython.boundscheck(False)
def delay(np.ndarray[FTYPE_t, ndim=1] f, np.ndarray[FTYPE_t, ndim=1] g):
cdef int size1 = f.shape[0]
cdef int size2 = g.shape[0]
cdef int max_correlation = 0
cdef int delay = 0
cdef int current_correlation, i, j
# Move second data set frame by frame
for i in range(0, size1 - size2):
current_correlation = 0
# Calculate correlation at that point
for j in range(size2):
current_correlation …Run Code Online (Sandbox Code Playgroud) 我有兴趣测试我的django应用程序的性能,获得逐行性能数据的最佳方法是什么?
注意:谷歌搜索返回许多人对django本身进行基准测试.我不是在寻找django的基准测试,我正在尝试测试我正在编写的django应用程序的性能:)
谢谢!
编辑:通过"逐行"我只是意味着计时单个函数,数据库调用等,以找出瓶颈在非常精细的水平上
据我所知,Sencha Touch只是一个javascript库,可让您创建响应多点触控的网站以及您在本机iPhone应用程序中找到的其他功能.所以...你的最终结果是在iPhone上的Safari上访问的,而不是原生的iPhone应用程序.有没有办法将其转换为本机应用程序?
在Python方面,我可以创建新的numpy记录数组,如下所示:
numpy.zeros((3,), dtype=[('a', 'i4'), ('b', 'U5')])
Run Code Online (Sandbox Code Playgroud)
我如何从C程序中做同样的事情?我想我必须打电话PyArray_SimpleNewFromDescr(nd, dims, descr),但我如何构建一个PyArray_Descr适合作为第三个参数传递的PyArray_SimpleNewFromDescr?
我想计算一个巨大矩阵的Moore-Penrose伪逆.理想情况下,我想在具有2300万行和1000列的矩阵上进行此操作,但如果需要,我可以通过仅在我的实验的一部分上运行来将行数减少到400万.
显然,将矩阵加载到内存并在其上运行SVD是行不通的. 维基百科指向Krylov子空间方法并提及Arnoldi,Lanczos,Conjugate梯度,GMRES(广义最小残差),BiCGSTAB(biconjugate梯度稳定),QMR(准最小残差),TFQMR(无转置QMR)和MINRES(最小残差) )方法是最好的Krylov子空间方法之一.但我不知道从哪里开始.计算这样一个巨大矩阵的伪逆是否可行?如果是这样,使用哪些算法或软件库?我有一个大型计算集群,所以欢迎并行方法.
这个答案指向R包biglm.那会有用吗?有人用过吗?我通常使用Python,但不介意使用其他语言和工具来完成这项特定任务.
我创建wx.TextEntryDialog如下:
import wx
dlg = wx.TextEntryDialog(self, 'Rules:', 'Edit rules',
style=wx.TE_MULTILINE|wx.OK|wx.CANCEL)
dlg.SetValue(self.rules_text.Value)
if dlg.ShowModal() == wx.ID_OK:
…
Run Code Online (Sandbox Code Playgroud)
这会导致对话框太小而无法满足我的需求,并且无法调整大小:

我的问题是:如何使对话框变大和调整大小? 我尝试添加的标志wx.DEFAULT_DIALOG_STYLE和wx.RESIZE_BORDER,但除了曾与点替换文本没有影响:
dlg = wx.TextEntryDialog(self, 'Rules:', 'Edit rules',
style=wx.TE_MULTILINE|wx.OK|wx.CANCEL|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
Run Code Online (Sandbox Code Playgroud)

我在C程序中嵌入了Python解释器.假设C程序从文件中读取一些字节到char数组和学习(以某种方式),该字节表示以一定的编码文本(例如,ISO 8859-1中,Windows-1252,或UTF-8).如何将此char数组的内容解码为Python字符串?
Python字符串通常应该是类型unicode- 例如,0x93Windows-1252编码的输入变为u'\u0201c'.
我试图使用PyString_Decode,但是当字符串中有非ASCII字符时它总是会失败.这是一个失败的例子:
#include <Python.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
char c_string[] = { (char)0x93, 0 };
PyObject *py_string;
Py_Initialize();
py_string = PyString_Decode(c_string, 1, "windows_1252", "replace");
if (!py_string) {
PyErr_Print();
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误消息是UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 0: ordinal not in range(128),表示ascii即使我们windows_1252在调用中指定,也使用编码PyString_Decode.
以下代码通过使用PyString_FromString创建未解码字节的Python字符串,然后调用其decode方法来解决此问题:
#include <Python.h>
#include <stdio.h> …Run Code Online (Sandbox Code Playgroud) 我在MATLAB中有这行代码,由其他人编写:
c=a.'/b
Run Code Online (Sandbox Code Playgroud)
我需要将它翻译成Python.a,b和c都是数组.我目前用于测试代码的维度是:
a:18x1,
b:25x18,
这给了我c尺寸1x25.
数组不是正方形,但我不希望代码失败.有人可以解释这条线正在做什么(数学上),以及如何在Python中做到这一点?(即,如果它存在于Python中,那么MATLAB中内置的mrdivide函数的等价物?)
假设我使用相同的dtype制作两个重组并堆叠它们:
>>> import numpy as np
>>> dt = [('foo', int), ('bar', float)]
>>> a = np.empty(2, dtype=dt).view(np.recarray)
>>> b = np.empty(3, dtype=dt).view(np.recarray)
>>> c = np.hstack((a,b))
Run Code Online (Sandbox Code Playgroud)
虽然a并且b是重新排列,但c不是:
>>> c.foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'foo'
>>> d = c.view(np.recarray)
>>> d.foo
array([ 0, 111050731618561, 0,
7718048, 8246760947200437872])
Run Code Online (Sandbox Code Playgroud)
如上所示,我显然可以再次将其变成重新组合,但这很不d方便.有没有理由为什么堆叠两个重组不会产生另一个重新排列?
我使用matplotlib将数字矩阵显示为图像,沿轴附加标签,并将绘图保存到PNG文件.为了创建HTML图像映射,我需要知道PNG文件中由imshow显示的图像中的区域的像素坐标.
我已经找到了一个如何使用常规绘图执行此操作的示例,但是当我尝试使用imshow执行相同操作时,映射不正确.这是我的代码,它保存图像并尝试打印对角线上每个正方形中心的像素坐标:
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
axim = ax.imshow(np.random.random((27,27)), interpolation='nearest')
for x, y in axim.get_transform().transform(zip(range(28), range(28))):
print int(x), int(fig.get_figheight() * fig.get_dpi() - y)
plt.savefig('foo.png', dpi=fig.get_dpi())
Run Code Online (Sandbox Code Playgroud)
这是生成的foo.png,显示为截图以包含标尺:

脚本的输出开始和结束如下:
73 55
92 69
111 83
130 97
149 112
…
509 382
528 396
547 410
566 424
585 439
Run Code Online (Sandbox Code Playgroud)
如你所见,y坐标是正确的,但x坐标是拉伸的:它们的范围从73到585而不是预期的135到506,它们间隔19像素而不是预期的14.我在做什么错误?