2012-02-16 6 views
1

현재로서는 많은 양의 float/double 데이터 세트를 계산에 사용하고 있습니다. 데이터 A와 데이터 B를 비교할 파일 집합이 있고 유클리드 거리/코사인 유사성을 계산하고 싶습니다. I.E. 데이터 포인트 1은 데이터 B 포인트를 반복하여 가장 가까운 이웃을 찾습니다.대용량 데이터 세트 액세스 및/또는 저장

데이터는 텍스트 파일로 제공됩니다. 문제는 없습니다. 정보 저장/읽기에 대한 이상적인 방법은 무엇입니까?

데이터 A의 모든 포인트에 대해 데이터 B를 반복해야합니다. 데이터는 수레로 저장해야합니다. 각 데이터 요소에는 차원이있을 수 있습니다. 파일에는 최대 2mil의 플로트가 포함될 수 있습니다.

내가 사용에 대한 이동해야 :

  1. 가 지속적으로 데이터 B의 파일을 읽고 목록에 데이터를 저장하는 문자열 (나는 이것이 매우 비효율적이라고 생각)
  2. 을 구문 분석 (수레의 배열)
  3. 메모리 맵 IO 사용?
  4. 의 HashMap (내가 HashMap의 비교적 새로운 오전, 그들은 난 그냥 아무 수정을 통해 반복하고있는 경우 컬렉션의 위치가, 시간이 지남에 따라 변경 될 수 있습니다 위치가 변경됩니다 말?)
+1

간단한 'float [] []'배열이 여기서 왜 작동하지 않는지 이해할 수 없습니다. –

+0

당신이 수학보다 나을 것 같아서, 배열에 수레를 저장하면 필요한 메모리를 계산하려고합니다 : float는 4 바이트이고, 여러분은 2 백만 가지가 있습니다. 8 백만 바이트는 8MB가됩니다. 메모리에 저장할 땅콩. 데이터 구조가 더 많은 메모리를 필요로하고 float 당 필요한 메모리를 10 배로 늘리더라도 여전히 80MB 만 남습니다. 아직도 땅콩. –

+0

아 데이터 세트의 해당 포인트를 추가하는 것을 잊어 버렸기 때문에 세트가 불완전해질 수 있습니다. 따라서 나는 을 가지고 있어야합니다. 1) 파일을 스캔하여 최대 크기와 클래스를 찾으십시오. 2)리스트를 사용하십시오. 사실 확인 및 정의 된 2D 배열을 만들거나 목록을 사용하기 전에 파일을 한 번씩 스캐닝하면 오버 헤드가 적을 것이라고 생각하십니까? –

답변

1

2M 수레가 그다지 그다지 그다지 많지는 않습니다. 모두 목록에 올리는 것이 완벽 할 것입니다. A와 B가 다차원이면, float [] []은 괜찮습니다. 메모리가 부족한 경우 먼저 B 전체를로드하고 A에서 한 번에 데이터 포인트를로드하십시오.

+0

죄송합니다. 위의 질문에 대한 추가 정보를 남겨 두었습니다. 빛을 비추어 주시면 고맙겠습니다. –

1

기본 솔루션 가장 좋은 방법은 float[][]입니다. 거의 확실하게 가장 효율적이고 가장 빠른 솔루션이며 매우 간단합니다.

+0

죄송합니다. 위의 질문을 이끌어 낸 추가 정보를 남겨 두었습니다. 빛을 비추어 주시면 감사하겠습니다. –

관련 문제