小编BVJ*_*BVJ的帖子

Cython 中用于循环调用的快速基本线性代数

我正在尝试在 cython 中编写一个用于蒙特卡罗模拟的函数。该函数涉及多个小的线性代数运算,如点积和矩阵求逆。随着函数被调用数十万次,numpy 开销占据了很大一部分成本。三年前有人问过这个问题:在 Cython 中调用点积和线性代数运算? 我尝试使用两个答案中的建议,但第一个 scipy.linalg.blas 仍然通过 python 包装器,我并没有真正得到任何改进。第二,使用 gsl 包装器也相当慢,当向量的维度非常大时,往往会冻结我的系统。我还发现了 Ceygen 包,看起来很有希望,但似乎安装文件在上次 Cython 更新中损坏了。另一方面,我看到 scipy 正在为 lapack 开发一个 cython 包装器,但它看起来仍然不可用 ( scipy-cython-lapack) 最后,我还可以为这些操作编写自己的 C 例程,但似乎有点重新发明轮子。

总结一下:在 Cython 中是否有这种操作的方法?(因此我不认为这是重复的)或者您是否找到了更好的方法来处理我尚未见过的此类问题?

必填代码示例:(这只是一个例子,当然它仍然可以改进,但只是提供想法)

 cimport numpy as np
 import numpy as np

 cpdef double risk(np.ndarray[double, ndim=2, mode='c'] X,
     np.ndarray[double, ndim=1, mode='c'] v1, 
     np.ndarray[double, ndim=1, mode='c'] v2):

     cdef np.ndarray[double, ndim=2, mode='c'] tmp, sumX
     cdef double ret

     tmp = np.exp(X)
     sumX = np.tile(np.sum(tmp, 1).reshape(-1, 1), (1, tmp.shape[0]))
     tmp = tmp / …
Run Code Online (Sandbox Code Playgroud)

python numpy cython scipy

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

Epson 打印机的 4 字节校验和、sum32 算法

我正在 Linux 设备上编写与 Epson tm-t88iv 热敏打印机的低级通信,该打印机仅接收十六进制包。我已阅读手册试图了解校验和是如何构建的,但我无法重新创建它。

手册上说校验和是 4 个字节,表示发送的包中所有数据的 2 个字节之和。

我目前有四个工作示例,是通过使用不同的程序监听 Windows 计算机上的端口而找到的。最后 4 个十六进制是校验和(根据手册,03 标记数据的结束并包含在校验和计算中)。

02 AC 00 01 1C 00 00 03 30 30 43 45
02 AC 00 00 1C 80 80 1C 00 00 1C 00 00 1C 03 30 32 32 31
02 AD 07 01 1C 00 00 1C 31 30 03 30 31 35 33
02 AD 00 00 1C 80 80 1C 00 00 1C 00 00 1C 03 30 32 …
Run Code Online (Sandbox Code Playgroud)

checksum low-level epson

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

标签 统计

checksum ×1

cython ×1

epson ×1

low-level ×1

numpy ×1

python ×1

scipy ×1