6

私はSystem.Numerics.Vector<T>ドキュメント)を使用しようとしています。

簡単な単体テストを書きました:

var v = new System.Numerics.Vector<double>(new double[] { 12, 13, 14 });
Assert.AreEqual(3, v.Count);

しかし、ビルドエラーが発生しました:

メンバー 'Vector.Count' は、インスタンス参照ではアクセスできません。代わりに型名で修飾してください

驚いたことに、Vector<T>.Count静的です。

だから私は試しました:

var v = new System.Numerics.Vector<double>(new double[] { 12, 13, 14 });
Assert.AreEqual(3, Vector<double>.Count);

コードはビルドされますが、単体テストは失敗します。

Assert.AreEqual が失敗しました。予想:<3>。実際:<2>。

どうしたの?


私が見つけた調査:

Assert.AreEqual(2, Vector<double>.Count);
Assert.AreEqual(4, Vector<float>.Count);
Assert.AreEqual(4, Vector<int>.Count);
Assert.AreEqual(2, Vector<long>.Count);
4

2 に答える 2

2

ベクトルはやや紛らわしいタイプかもしれません。事前定義された固定長のコレクションです。その長さは常に == であるため、固定されていVector<T>.Countます。したがって、次のようにします。

var v = new Vector<double>(new double[] { 12, 13, 14 });
Console.WriteLine(v);

結果は... :

<12, 13>

Vector<double>.Countたまたま 2 になるすべての値を削除するだけです。秘訣は、 Vector<T>.CountCPU アーキテクチャによって異なる場合があることです。

説明が示すように、実際にはかなり低レベルのプリミティブです。

並列アルゴリズムの低レベルの最適化に適した、指定された数値型の単一ベクトルを表します。

于 2016-02-11T16:25:42.080 に答える