【发布时间】:2014-04-30 19:03:03
【问题描述】:
我正在计算矩阵的行列式,计算结果会根据数据的维度调用一个方法,例如:
template<int X, int Y>
float determinant(X, Y, std::vector<Vector> &data)
{
// Determine the dimensionality of matrix data (x and y)
}
我遇到的问题是,在调用此函数的计算 PCA 的类中,只接受一个迭代器:
class PCA {
public:
template<typename T>
PCA(T begin, T end)
{
// Determine the X and Y here
float det = determinant(X, Y, ....);
}
};
现在我想知道是否可以从通过 PCA 的迭代器中推断出 X 和 Y,而不是传入两个整数值。
任何建议将不胜感激
编辑:
抱歉,我的问题不清楚。
基本上,typedef std::vector<double> Vector; 被使用,因此 std::vector<Vector> data; 将因此是向量的向量。
我通过以下方式对其进行采样:
std::vector<Vector> data1 = { {1, 2}, {3, 4}, {5, 6}, {8, 9} }; // 2x2 而当我想添加以下内容时:std::vector<Vector> data2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12} }; // 3x3 很明显,在计算行列式时,对此有不同的计算。
我想从函数中推断出 data1 是 2x2 和 data2 3x3,而不必专门传入这些值。
【问题讨论】:
-
如果您需要任何帮助,您需要发布该迭代器的代码。
-
你在寻找 'std::iterator_traits' 吗?
-
我不确定我是否遵循。如果您所拥有的只是元素的数量(来自
end - begin),那么会有很多尺寸适合,不是吗?除非迭代器是某种特殊的迭代器,可以以某种方式访问维度? -
@user1326876:您能否展示示例用法,从一对迭代器创建 PCA,我们可以看到您在谈论什么维度?
Vector是什么?std::vector<Vector>本身是否代表一个二维数组,或者它是一个维度,而Vector是另一个维度,或者每个Vector是一个二维数组?还是涉及到 3d 数组? -
@user1326876 我不确定 8 个元素如何组成一个 2x2 矩阵.. 但顺便说一下,你可能(如果你有所有方阵)用 vector::size 计算元素的数量()