我有个需要在.NET应用程序在多达4个维度的稀疏矩阵。矩阵的大小(如果表示为.NET阵列)将潜在顶部400MB。

在阵很可能是非常稀少的,我需要能够实例化并很快处理它(虽然这不是一个没有去)。因此稀疏矩阵库,耗材从.NET 3.5(我相信排除了使用BGL从托管C ++?),那就是尽可能致密,因为我能得到并且支持快速随机访问索引之后我。它必须是可序列化到可以便宜一些缓存密集的格式。

是否这样的事情存在(还)用于.NET? FOSS?成熟?

TIA

安德鲁马修斯

有帮助吗?

解决方案

我建议 dnAnalytics 。它支持稀疏矩阵,并有许多选项,包括鲁棒解算器,用于支持IMKL等

其他提示

这是实现自己的一个解释非常简单。下面的执行工作2米的尺寸,但你可以很容易地实现3个或4个维度。存储是当矩阵是稀疏矩阵非常有效的。如果您打算添加或删除频繁列这不是一个很好的实现。

class SparseMatrix<T>
    {
        public T this[int i, int j]
        {
            get
            {
                T result;
                if (!_data.TryGetValue(new Key(i, j), out result))
                    return default(T);
                return result;
            }
            set { _data[new Key(i, j)] = value; } // Could remove values if value == default(T)
        }

        private struct Key
        {
            public Key(int i, int j)
            {
                _i = i;
                _j = j;
            }

            private readonly int _i;    
            private readonly int _j;
            public override bool Equals(object obj)
            {
                if (!(obj is Key))
                    return false;
                var k = (Key) obj;
                return k._i == _i && k._j == _j;
            }

            public override int GetHashCode()
            {
                return _i << 16 + _j; // Could be smarter based on the distribution of i and j
            }


        }

        private readonly Dictionary<Key, T> _data = new Dictionary<Key, T>();
    }

你会如何“轻松实现”,说一个4维矩阵或张量?我只看到i和j指数以上...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top