python - Python中的平行向量点
问题描述
我试图使用 numpy 进行下面的计算,其中 k 是一个常数,A 是一个大而密集的二维矩阵 (40000*40000),数据类型为 complex128:
A = A - k*np.matmul(A[:,0:1],A[1:2,:])
似乎 np.matmul 或 np.dot 只会使用一个核心。此外,减法运算也在一个内核中完成。我想在集群上运行这个操作,所以想知道我是否可以并行这个操作。对于一个简单的测试,我将这两个操作分开,看看哪个是时间成本部分。
t1 = time.time()
c = np.dot(A_matrix_reverse[:,0:1],A_matrix_reverse[0:1,:])
t2 = time.time()
c = A_matrix_reverse - 10*c
t3 = time.time()
print(t2-t1) # 3.7593634128570557
print(t3-t2) # 9.5412278175354
解决方案
Numpy 的点积通过 BLAS 运行,因此如果您使用多线程 BLAS 库运行它,它应该是多线程的。python -m pip install intel-numpy
如果由于某种原因您的本地 BLAS 库未针对多线程进行编译,我建议尝试针对 MKL ( ) 构建的 numpy 。
另外,请尝试以下操作,而不是当前的减法:
c *= -10
c += A_matrix_reverse
无需分配一堆您不想保留的中间产品。
推荐阅读
- node.js - 为什么聚合 ($date) 方法在 MongoDB 中不起作用
- mongodb - MongoDB:不支持语言覆盖:阿拉伯语
- numpy - 使用(可能使用 scipy.misc.imread)读取图像数据
- javascript - 函数调用正在堆积
- javascript - 数组数据仅每隔一个事件呈现到 HTML 表,否则未定义
- django - 有什么方法可以让@periodic_task 仅在调用时运行,它会在项目启动时自动运行?
- security - IPFiltering Asp 网络核心
- c++ - boost::spirit::x3 中的简单字符串解析器不起作用
- java - 具有最小和差的等分
- php - php中递归函数中的数组显示