سؤال

ولدي حاجة إلى مصفوفة متفرق في ما يصل إلى 4 أبعاد في تطبيق .NET. حجم المصفوفة (إذا ممثلة صفيف .NET) من المحتمل أن كبار 400MB.

وومجموعة من المرجح أن تكون ضئيلة جدا، وأنا بحاجة إلى أن تكون قادرة على مثيل والتخلص منه بسرعة جدا (على الرغم من أن ليست لا تذهب). لذا أنا بعد مكتبة متفرق مجموعة، استهلاك من .NET Framework 3.5 (التي أعتقد أنها تستبعد استخدام BGL من إدارتها C ++؟) أن كثيفة قدر الإمكان كما يمكنني الحصول على والدعم عشوائية بسرعة الوصول الفهرسة. يجب أن يكون للتسلسل لبعض شكل كثيف التي يمكن أن يكون مؤقتا غير مكلفة.

هل يوجد شيء من هذا القبيل (حتى الآن) ل. NET؟ البرمجيات الحرة مفتوحة المصدر؟ ناضجة؟

و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 مصفوفة الأبعاد أو موتر؟ أرى ومؤشرات ي فقط فوق ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top