【问题标题】:How to generate a Accord.Math.Sparse<double> element in C#?如何在 C# 中生成 Accord.Math.Sparse<double> 元素?
【发布时间】:2018-12-05 14:56:06
【问题描述】:

我正在尝试在 C# 中实现点积,为此,我使用 Accord.Math 及其方法 Dot,如下所示:

using Accord.Math;

namespace VectorOperations
{
    class DotProduct
    {
        private static double CalculateDotProduct(Sparse<double> Vector1, Sparse<double> Vector2)
        {
            double DotProduct = Vector.Dot(Vector1, Vector2);
            return DotProduct;
        }
    }
}

但是我无法创建一个示例来测试它是否正常工作,因为我不知道如何创建Sparse&lt;double&gt; 类型的变量。我如何创建一个作为示例?理想情况下,我希望:

Sparse<double> Vector1 = new Sparse<double>();
Sparse<double> Vector2 = new Sparse<double>();

// Vector1 = [1, 2, 3];
// Vector2 = [1, 2, 3];

所以我可以打电话给this.CalculateDotProduct(Vector1, Vector2) 并检查它是否正常工作。

如果您知道使用List&lt;double&gt; 类型的向量计算点积的任何其他方法,也欢迎。

【问题讨论】:

  • .NET 中没有 Sparse[T] 类。可能在功能上相似的东西是 Lazy[T] 用于延迟初始化。 new Sparse&lt;double&gt;() 似乎不完整,因为没有附加代码来处理调用时如何初始化值。
  • Sparse[T] 是 Accord 库中使用的一种数据类型。
  • 一个稀疏向量,每个值需要三个点:1) X 2) Y 3) 值。稀疏矩阵不会保存每个 x 和 y 值。因此,您可以使用任何具有这三个值的对象,例如创建您自己的具有 x、y 和 value 属性的类的元组。
  • @Marisa:我仍然不清楚那个类是做什么的。我最好的猜测是“惰性初始化阵列”?每个值都被延迟初始化的数组。
  • 您是否收到错误消息?它不编译吗?请澄清“它不起作用”的原因。

标签: c# sparse-matrix accord.net dot-product


【解决方案1】:

unit tests 展示了几种创建和填充实例的方法:

var s = new Sparse<double>();
s[0] = 1;
s[99] = 99;
s[10] = 42;

v = new double[] { 1, 2, 3, 0, 0, 6 };
d = Sparse.FromDense(v);

另一种方法是使用Sparse(int[] indices, T[] values) 构造函数:

Sparse<double> Vector1 = new Sparse<double>(new[] { 0, 1, 2 }, new[]  { 1, 2, 3 });

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 2019-01-24
    • 2020-12-28
    • 1970-01-01
    • 2011-10-06
    • 2014-01-16
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    相关资源
    最近更新 更多