문제

.NET 애플리케이션에서 최대 4 차원에서 드문 매트릭스가 필요합니다. 매트릭스의 크기 (.NET 배열로 표시되는 경우)는 잠재적으로 400MB를 상위로 삼는 것입니다.

배열은 매우 드문 일 가능성이 높으며, 매우 빨리 인스턴스화하고 처분 할 수 있어야합니다 (그렇지는 않지만). 그러므로 나는 희박한 배열 라이브러리를 따라, .NET 3.5에서 소비 할 수 있습니다. 저렴하게 캐시 할 수있는 조밀 한 형식으로 직렬화 할 수 있어야합니다.

.NET에 대해서는 아직 (아직) 존재합니까? 포스? 성숙한?

티아

앤드류 매튜스

도움이 되었습니까?

해결책

추천합니다 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