저는 파이썬으로 작업 중이며 텍스트 파일에 매트릭스가 저장되어 있습니다. 텍스트 파일 등의 형식으로 배열된다텍스트 파일에서 시장 매트릭스 형식으로
ROW_ID,
ROW_ID을 col_id
...
ROW_ID을 col_id,
ROW_ID 및 col_id이 정수인 col_id 그들은 0의 값을 취 n (row_id와 col_id에 대해 n을 알기 위해서는 먼저 전체 파일을 스캔해야합니다).
헤더가없고 row_ids와 col_ids가 파일에 여러 번 나타나지만 각 행 row_id, col_id 조합은 한 번 나타납니다. 각 조합 row_id, col_id에 대한 명시적인 값은 없습니다. 실제로 각 셀 값은 1입니다. 파일 크기는 거의 1 기가 바이트입니다.
불행히도 파일은 메모리에서 처리하기가 어렵습니다. 실제로 26622704 개 요소의 경우 2257205 row_ids 및 122905 col_ids입니다. 그래서 나는 그것을 다루는 더 나은 방법을 찾고있었습니다. 매트릭스 시장 형식은이를 처리 할 방법이 될 수 있습니다.
이 파일을 Python을 사용하여 시장 매트릭스 형식 (http://math.nist.gov/MatrixMarket/formats.html#mtx)의 파일로 변환하는 빠르고 효율적인 방법이 있습니까?
각 논리 셀 값이 비어 있거나 1이므로이 매트릭스는 본질적으로 2D 비트 맵입니다. 파이썬은 어떤 크기의 정수 값도 지원하기 때문에 정수의 목록으로 메모리에 행렬을 저장하고 조회 및 몇 비트 조작으로 모든 셀의 값을 결정할 수 있습니다. 행 ID와 열 ID의 상한선은 무엇입니까? – martineau
행의 상한은 2257205이고 열은 122905입니다. –
크기가 너무 커서 메모리에 저장할 수없는 비트 맵을 나타내는 데 약 32GB가 필요합니다. 대신 바이너리 파일에 저장할 수 있습니다. 비트 [row] [col]에 너무 액세스하면 어떤 바이트에 비트가 들어 있는지 계산하고, 해당 파일 오프셋을 찾고, 1 바이트를 읽거나 쓰는 것이 필요합니다. 26622704 개 요소에 대해 파일 IO가 많을 수 있지만 실현 가능성이 있습니다. – martineau