初始化 QGenericMatrix

问题描述 投票:0回答:3

我需要一个用于神经网络矩阵乘法的矩阵,因为我使用提供 QGenericMatrix 的 Qt 框架,我想我试一试。但我不知道如何用数据初始化矩阵。

它有这个构造函数,但我无法正确使用它。

QGenericMatrix::QGenericMatrix(const T * values)

所以如果有人可以给我一个示例初始化,例如

    QGenericMatrix<2,2,int> a();

如果我搜索 QGenericMatrix,除了官方类定义,我几乎找不到任何东西,所以我想知道 QGenericMatrix 是否是一个好的选择?

c++ qt matrix-multiplication
3个回答
7
投票

直接给构造函数传值很简单:

int values[] = {
    1, 2,
    3, 4
};

QGenericMatrix<2,2,int> matrix(values);

1
投票

或者声明一个数组文字作为构造函数参数。

QGenericMatrix<2, 2, int> a( new int[]{ 1, 2, 3, 4 } );

0
投票

如果您想拥有一个易于使用的通用解决方案,请考虑此模板:

/** @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);

此外,它是安全的,因为它保证所有矩阵字段都已实际初始化(当数组的字段少于矩阵时可能会出错)。

© www.soinside.com 2019 - 2024. All rights reserved.