以上就是给各位分享加快用于计算矩阵辅因子的python代码,其中也会对矩阵辅助因子进行解释,同时本文还将给你拓展c–无法执行Cython包装的Python代码、C#中的Python脚本通过C#传递值并
以上就是给各位分享加快用于计算矩阵辅因子的python代码,其中也会对矩阵辅助因子进行解释,同时本文还将给你拓展c – 无法执行Cython包装的Python代码、C#中的Python脚本通过C#传递值并从python代码获取返回值、Python / NumPy中用于计算均值的元素排列、python – 用于计算“多项式系数”的numpy / scipy函数等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 加快用于计算矩阵辅因子的python代码(矩阵辅助因子)
- c – 无法执行Cython包装的Python代码
- C#中的Python脚本通过C#传递值并从python代码获取返回值
- Python / NumPy中用于计算均值的元素排列
- python – 用于计算“多项式系数”的numpy / scipy函数
加快用于计算矩阵辅因子的python代码(矩阵辅助因子)
作为复杂任务的一部分,我需要计算矩阵辅因子。我使用此漂亮的代码来计算矩阵未成年人的方式很简单。这是我的代码:
def matrix_cofactor(matrix): C = np.zeros(matrix.shape) nrows, ncols = C.shape for row in xrange(nrows): for col in xrange(ncols): minor = matrix[np.array(range(row)+range(row+1,nrows))[:,np.newaxis], np.array(range(col)+range(col+1,ncols))] C[row, col] = (-1)**(row+col) * np.linalg.det(minor) return C
原来,这个矩阵辅助因子代码是瓶颈,我想优化上面的代码片段。关于如何执行此操作的任何想法?
答案1
小编典典如果矩阵是可逆的,则辅因子与逆有关:
def matrix_cofactor(matrix): return np.linalg.inv(matrix).T * np.linalg.det(matrix)
这样可以大大提高速度(对于50x50矩阵,约为1000倍)。主要原因是根本的:这是一种O(n^3)
算法,而基于次要成绩的算法是O(n^5)
。
这也可能意味着对于不可逆矩阵,也有一些聪明的方法可以计算辅因子(即,不使用上面使用的数学公式,而是使用其他等效定义)。
如果您坚持使用基于det的方法,则可以执行以下操作:
大部分时间似乎都在里面度过det
。(检查line_profiler可以自己找到。)您可以尝试通过将Numpy与Intel
MKL链接来加快这一部分的速度,但是除此之外,您还可以做很多事情。
您可以像这样加快代码的另一部分:
minor = np.zeros([nrows-1, ncols-1])for row in xrange(nrows): for col in xrange(ncols): minor[:row,:col] = matrix[:row,:col] minor[row:,:col] = matrix[row+1:,:col] minor[:row,col:] = matrix[:row,col+1:] minor[row:,col:] = matrix[row+1:,col+1:] ...
根据矩阵的大小,这将获得大约10-50%的总运行时间。原始代码具有Pythonrange
和列表操作,这比直接切片索引慢。您也可以尝试变得更聪明,只复制实际更改的未成年人的部分
—但是,在完成上述更改之后,内部已花费了将近100%的时间,numpy.linalg.det
因此无法进一步优化其他部分很有道理
c – 无法执行Cython包装的Python代码
我正在包装的函数,读取图像的文件名并显示图像. Show_Img.pyx文件如下所示
import cv2 cdef public void Print_image(char* name): img = cv2.imread(name) cv2.imshow("Image",img) while(True): if cv2.waitKey(1) & 0xFF == ord('q'): break
从Cython生成的c接口如下所示
__PYX_EXTERN_C DL_IMPORT(void) Print_image(char *);
头文件包含在我的algo.cpp中,它调用下面的函数
#include<iostream> #include<Python.h> #include"Show_Img.h" using namespace std; int main(){ char *name = "face.jpg"; Py_Initialize(); Print_image(name); Py_Finalize(); return 0; }
使用下面的命令,我还可以编译上面的代码并生成应用程序
g++ algo.cpp `pkg-config --libs --cflags python-2.7` `pkg-config --libs --cflags opencv` -L. -lShow_Img -o algo
还正确设置了库LD_LIBRARY_PATH的路径
执行应用程序时,出现错误分段错误(核心转储)
为什么我无法执行应用程序,生成过程中是否存在错误?或图书馆链接?
解决方法
// ... Py_Initialize(); initShow_Img(); // for python3 use PyInit_Show_Img instead Print_image(name); Py_Finalize(); // ...
原因是这个设置模块,包括执行行导入cv2.没有它,访问模块全局变量(到达cv2)之类的东西将无法可靠地工作.这可能是导致分段错误的原因.
这是在the documentation example.
C#中的Python脚本通过C#传递值并从python代码获取返回值
如何解决C#中的Python脚本通过C#传递值并从python代码获取返回值?
我正在用 C# 制作一个 GUI 并使用铁 python 编写 python 脚本。但我想将 C# 代码中的值传递给 python 代码,并获取返回值以显示在我的 gui 中。可以吗???
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Python / NumPy中用于计算均值的元素排列
我有一维列表如下:
data = [1,5,9,13,2,6,10,14,3,7,11,15,4,8,12,16]
我要列出以下元组,并分别计算每个元组的平均值。
[(1,6),(3,8),(9,14),(11,16)]
预期结果应为:
[3.5,5.5,11.5,13.5]
这样做更简单的方法是什么?
python – 用于计算“多项式系数”的numpy / scipy函数
如果没有,你能想到一种有效的计算方法吗? (我对天真/贪婪的方式不感兴趣).
解决方法
因此,您是否考虑在足够零填充的阵列上使用FFT,将其元素提升到幂n并使用逆FFT来恢复所有系数
(1+x+x**2+x**3+...+x**(k-1))**n
然后只是阅读你感兴趣的那些?
更新:
由于FFT是循环的,因此您需要一个不小于其中的项数的数组
(1+x+x**2+x**3+...+x**(k-1))**n
或者换句话说,(k-1)* n 1使结果不会在末端环绕(或者至少在它们这样做时它们只向受影响的元素添加零).通常它的长度也应该是2的幂,因为这是FFT算法所要求的(实现不需要它将用零填充输入直到它).
在类似C的伪代码中:
unsigned int m = 1; while(m<(k-1)*n+1) m *= 2; complex c[m]; for(unsigned int i=0;i!=k;++i) c[i] = complex(1.0,0.0); for(unsigned int i=k;i!=m;++i) c[i] = complex(0.0,0.0); c = fft(c); for(unsigned int i=0;i!=m;++i) c[i] = pow(c[i],double(n)); c = inv_fft(c);
在此结束时,复数组c的第r个元素的实部等于x ** r的系数和零的虚部.
现在,由于这都是以浮点形式完成的,因此您应该知道这些元素将累积舍入错误.您可以通过将它们四舍五入到最接近的整数来部分纠正这一点,但要注意,对于足够大的k和n,这些误差将超过0.5,因此这会产生因某些小的相对误差而关闭的结果.
在网上快速搜索显示,numpy分别具有FFT及其逆,numpy.fft.rfft和numpy.fft.irfft的实现,您可以在输入数据为真时使用.
今天关于加快用于计算矩阵辅因子的python代码和矩阵辅助因子的讲解已经结束,谢谢您的阅读,如果想了解更多关于c – 无法执行Cython包装的Python代码、C#中的Python脚本通过C#传递值并从python代码获取返回值、Python / NumPy中用于计算均值的元素排列、python – 用于计算“多项式系数”的numpy / scipy函数的相关知识,请在本站搜索。
本文标签: