我尝试尝试使用 numba,因为有人告诉我它非常适用于数值/科学计算应用程序。但是,似乎我已经在以下场景中遇到了问题:
我有一个函数,它计算一个 12x12 的雅可比矩阵,由一个 numpy 数组表示,然后返回这个雅可比矩阵。但是,当我尝试用 装饰所述函数时@numba.njit,出现以下错误:
这通常不是 Numba 本身的问题,而是通常由使用不受支持的功能或解析类型的问题引起的。
作为我使用的一个基本示例,以下代码尝试声明一个 12x12 numpy 零矩阵,但它失败了:
import numpy as np
import numba
@numba.njit
def numpy_matrix_test():
A = np.zeros([12,12])
return A
A_out = numpy_matrix_test()
print(A_out)
Run Code Online (Sandbox Code Playgroud)
由于我认为以这种方式声明 numpy 数组很常见以至于 numba 能够处理它们,因此我感到非常惊讶。
我有一个包含私有 C 数组的 C++ 类,如下所示,
class DataObject {
private:
double* data_array_;
};
Run Code Online (Sandbox Code Playgroud)
由于程序中未显示的其他部分的限制,我不能使用 a std::vector<double>,不能使用DataObject构造函数来初始化数组(初始化列表?),并且不想在堆上分配数组。因此,我必须在一个init()函数中初始化数组,该函数将数组元素的数量作为参数。到目前为止,我已经尝试了以下方法,但不幸的是它们似乎不起作用:
尝试 1:
void DataObject::init(unsigned int num_elements) {
data_array_[num_elements];
}
Run Code Online (Sandbox Code Playgroud)
尝试 2:
void DataObject::init(unsigned int num_elements) {
data_array_ = double[num_elements];
}
Run Code Online (Sandbox Code Playgroud)
因此,我想知道鉴于上述限制,是否还有另一种方法来初始化堆栈分配的私有 C 数组。