C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[41366] Re:[질문] Random Sparse Matrix 를 바이너리 파일로 쓰기.
smleelms [smleelms] 1007 읽음    2005-08-08 11:41
흠.. 저도 지금 Matlab이랑 BCB랑 왔다갔다하면서 씨름하고 있네요.. ^^

일단 로직을 돌리신 후에 나오는 vi 벡터가 N개의 행벡터로 나뉘면, 각 N개의 벡터의 크기를 인덱스로 만들어주시면 되겠네요.

그래서 저장하실때 파일헤더에 몇개의 행벡터인가.. 그다음에 각 벡터의 크기를 저장하시고, 그다음에 그냥 vi 벡터를 1차원 배열로 생각하시고 쭉~~ 저장하신 후에..

읽어들이실때에는 파일헤더의 첫부분을 읽으시고, 그러면 벡터 크기 인덱스의 크기를 알 수가 있겠지요.
이후에 vi 벡터를 읽어들이신 후에, 벡터 크기 인덱스를 참고해서 짤라내시면 됩니다.

소스까지는 좀 그렇구요.. 기본적으로 저렇게만 이해하시면 금방 구현되실듯 합니다.

[행벡터의갯수]
[각 행벡터의 크기를 가지는 인덱스] <= 이넘의 크기는 행벡터의 갯수를 참고하시면 됩니다.
[vi vector] <= 위 인덱스의 크기들을 다 합치면 이넘의 크기가 되겠네요..

그럼...

kalamazu 님이 쓰신 글 :
: 안녕하세요.
:
: 여기에 이렇게 유익한 싸이트가 있는줄 몰랐네요.
: 오늘 가입했습니다.
:
: 저는 응용코딩 이론(Applied Coding Theory)를 공부하고 있습니다.
: 프로그램을 만들때 매번 MatLab을 이용하다 보니 속도가 넘 느려서 이제서야 C++로 눈을 돌렸습니다.
: 백그라운드가 많이 부족해서 그런지 상당히 힘이 드네요.
:
: 제 질문은,
: 사이즈가 N by M 인 Random Sparse Matrix를 바이너리 파일로 쓸려고 하는데,
: 문제는 싸이즈가 넘 커서...(예를 들면 N=2000,000 , M=1000,000).
: 그래서 이 Matrix의 각 행의 0 이 아닌 엔트리만 Vector 형태로 저장할려고 합니다.
: 이런 식으로 저장을 하면 Matrix를 (10X1000,000)의 사이즈로 저장을 할수가 있거든요.
: 문제는 이런식으로 저장할때, 초보자에게 늘 그렇듯이, 각 행벡터가 사이즈가 다르기 때문에 어떻게 행벡터와 행벡터를 구분하게 해주어야 할지 참 난감합니다.
: 행벡터와 행벡터를 구분할수 있는 구분자를 넣을수 있는 예제를 소스코드와 함께 강의를 좀 해주실수 없을까요?
: 미리 감사드립니다.
:
: 참고:Sparse Matrix 란 Matrix의 거의모든 성분이 0인 Matrix 입니다.
:
: 참고로 아래코드는 지금 제가 Try 하고 있는 코드입니다.
:
: ******************************************************
: #include <iostream.h>
: #include <stdlib.h> //rand() 를 사용하기 위함.
:
: #include <vector> //matrix size가 constant가 아니므로 vector를 이용함.
: using std::vector;
:
: #include <algorithm>
: using std::random_shuffle; // random vector를 만들어줌.
:
:
:
: void main( void )
: {
:
:  //먼저 matrix 의 0이 아닌 성분의 총 개수를 t 로 입력받음.
:   int t;
:   cout << "Enter the size of your permutations:";
:   cin >> t;
:  
:  //싸이즈 t 인 Identity Vector를 생성함.
:   vector < int > vi;
:   for ( int i = 0; i < t; i++ )
:   {
:     vi.push_back( i );
:   }
:
:   //Identity Vector를 랜덤 셔플링 함.
:    for ( int j = 0; j < 10; j++ )
:   {
:     random_shuffle( vi.begin(), vi.end() );
:   }
: }
:
: /* 이 vi 벡터를 사이즈가 서로다른 row(1),row(2),...,row(n) 으로 나누어서
: 각 row(i)에 있는 성분을 i번째 행의 nonzero 성분으로 사용할려고 합니다.
: row(i)의 그 나머지 성분은 모두 zero. */
: *******************************************************************
:
:
: 일단 여기까지 무난하게 됐구요.
: 이제 이 vi 벡터를 N개의 행벡터로 나누어서 바이너리 파일로 저장해야 하는데,
: fstream을 이용해서 ios::open 과 ios::binary  옵션을 사용해서 저장하라고 하더군요.
: (지금 연습을 하고 있습니다만, 워낙 초보라서...떡을 줘도 입에 못넣네요 ㅎㅎ).
:
: 이때 바이너리 파일로 저장할때 행벡터와 행벡터를 구분하게 할려면 어떻게 해야 하는지...
: 좋은 조언 부탁드립니다.

+ -

관련 글 리스트
41365 [질문] Random Sparse Matrix 를 바이너리 파일로 쓰기. kalamazu 992 2005/08/08
41366     Re:[질문] Random Sparse Matrix 를 바이너리 파일로 쓰기. smleelms 1007 2005/08/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.