吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 958|回复: 3
收起左侧

[已解决] Numba算法优化相关,出现错误求助

[复制链接]
ASRAMV 发表于 2021-10-17 06:31
本帖最后由 ASRAMV 于 2021-10-17 16:23 编辑

尝试用Numba优化矩阵乘法算法
1为初始,后面考虑即使编译和并行计算都没有问题
再尝试把矩阵分为l*l的小块去计算出现了错误,救助一下原因

图片

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| ASRAMV 发表于 2021-10-17 09:12
抱歉图片想用超链接编辑了几次好像还是失败了,直接发出来好了
阳光肥肥 发表于 2021-10-17 10:42
m/l默认返回的是float 应该用m//l
并且你发代码建议如下发,别人好复制

[Python] 纯文本查看 复制代码
for i in numba.prange(m//l):

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ASRAMV + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| ASRAMV 发表于 2021-10-17 15:58
本帖最后由 ASRAMV 于 2021-10-17 16:23 编辑
阳光肥肥 发表于 2021-10-17 10:42
m/l默认返回的是float 应该用m//l
并且你发代码建议如下发,别人好复制

感谢回复,试了一下不会报错,但是内存一直挂掉,而且不出结果
[Python] 纯文本查看 复制代码
import numpy as np
import numba

@numba.njit(parallel=True)
def mat_product(mat_a, mat_b):
    m = mat_a.shape[0]
    n = mat_b.shape[1]
    l = 5

    assert(mat_a.shape[1] == mat_b.shape[0])

    ncol = mat_a.shape[1]

    mat_c = np.zeros((m, n), dtype=np.float64)
    
    mat_b = np.asfortranarray(mat_b)

    for i in numba.prange(m//l):
        for j in numba.prange(n//l):
            for r in range(l):
                for c in range(l):
                    for k in range(ncol):
                        mat_c[i+k, j+k] += mat_a[i*l+k, k] * mat_b[k, j*l+k]
    return mat_c

a = np.random.randn(50, 50)
b = np.random.randn(50, 50)

c = mat_product(a, b)

检查我用的如下命令,正常是能返回时间的(也是检测优化结果的)
[Python] 纯文本查看 复制代码
time = %timeit -o mat_product(a, b)
print(time.best)



尝试数值取小一些之后成功了,非常感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 20:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表