我需要一个用于神经网络矩阵乘法的矩阵,因为我使用提供 QGenericMatrix 的 Qt 框架,我想我试一试。但我不知道如何用数据初始化矩阵。
它有这个构造函数,但我无法正确使用它。
QGenericMatrix::QGenericMatrix(const T * values)
所以如果有人可以给我一个示例初始化,例如
QGenericMatrix<2,2,int> a();
如果我搜索 QGenericMatrix,除了官方类定义,我几乎找不到任何东西,所以我想知道 QGenericMatrix 是否是一个好的选择?
直接给构造函数传值很简单:
int values[] = {
1, 2,
3, 4
};
QGenericMatrix<2,2,int> matrix(values);
或者声明一个数组文字作为构造函数参数。
QGenericMatrix<2, 2, int> a( new int[]{ 1, 2, 3, 4 } );
如果您想拥有一个易于使用的通用解决方案,请考虑此模板:
/** @internal
*
* @brief Convenience constructor for QGenericMatrix.
*
* @tparam N columns
* @tparam M rows
* @tparam T typename
* @param args Initialization values. The number of arguments must be
* exactly N × M.
*
* @returns The corresponding QGenericMatrix. */
template<int N, int M, typename T, typename... Args>
[[nodiscard]] constexpr QGenericMatrix<N, M, T> createMatrix(Args... args)
{
// Too few arguments leave values uninitialized, too many arguments
// result in compiler warnings.
static_assert(sizeof...(args) == N * M, "Invalid number of arguments.");
const T valueArray[] = {args...};
return QGenericMatrix<N, M, T>(valueArray);
}
使用方便:
auto temp = createMatrix<2, 2, int>(1, 2, 3, 4);
此外,它是安全的,因为它保证所有矩阵字段都已实际初始化(当数组的字段少于矩阵时可能会出错)。