如何创建填充多个8x8 np.zeros数组的np.array且适配Numba njit
解决方案
你需要的result本质是形状为(N, 8, 8)的三维numpy数组,其中N为你要的8x8子数组的数量,可灵活调整,该结构完全适配numba njit的类型要求,初始化和后续修改的实现方式如下:
初始化代码
import numpy as np from numba import njit @njit def init_result(N: int): # 直接指定形状为(N, 8, 8),dtype固定为float32,完全符合numba类型推断规则 result = np.zeros((N, 8, 8), dtype=np.float32) return result
后续修改元素示例
你可以直接通过三层索引访问对应子数组的元素,双层循环遍历单个子数组的写法参考:
@njit def modify_result(result): N = result.shape[0] # 遍历每个8x8子数组 for k in range(N): # 双层循环遍历当前子数组的所有元素 for i in range(8): for j in range(8): # 此处替换为你自己的修改逻辑,示例为赋值为k+i+j result[k, i, j] = k + i + j return result
注意不要采用创建单个
t_list再多次拼接生成result的写法,一是拼接操作在numba njit环境下的开销远高于直接初始化三维数组,二是如果操作不当容易出现多个子数组共享同一块内存的问题,修改一个就会影响所有子数组,直接初始化三维数组可以完全规避这个问题。
内容的提问来源于stack exchange,提问作者Panda50
相关产品推荐
相关产品推荐

