2014-09-09 1 views
0

끝까지 도달 할 때까지 파일을 읽는 루프가 있습니다. 루프를 통과 할 때마다 1D numpy 배열을 추출합니다. 이 배열을 다른 numpy 배열에 2D 방향으로 추가하려고합니다. 그건 내가 형태numpy에 배열 추가

x = [1,2,3] 

의 뭔가를 읽을 수있는, 내가 형태

z = [[0,0,0], 
    [1,1,1]] 

나는 단순히

내 원하는 결과를 얻을 수 z = numpy.append([z],[x],axis = 0)을 할 수 있습니다 알고있는 무언가에 추가 할
z = [[0,0,0], 
    [1,1,1], 
    [1,2,3]] 

내 문제는 첫 번째 배열을 읽어들이는 것이 2D 배열의 첫 번째 행이기 때문에 루프를 처음 실행할 때 아직 추가 할 항목이 없습니다. 나는 그 것이 추악하기 때문에 첫 번째 경우를 다루기 위해 if 서술문을 작성해야 할 필요가 없다. 목록으로 작업하는 중이라면 루프 전에 간단히 z = []을 수행하고 배열을 읽을 때마다 단순히 원하는 결과를 얻기 위해 z.append(x)을 수행하면됩니다. 그러나 numpy에서 비슷한 절차를 수행하는 방법을 찾을 수 없습니다. 빈 번지 배열을 만들 수는 있지만 원하는대로 배열에 추가 할 수는 없습니다. 누구든지 도와 줄 수 있습니까? 나는 어떤 의미가 있습니까?

편집 :

좀 더 연구 후에, 나는 기술적으로 내가 NumPy와 추기가 매우 느립니다 주어진 @Roger 팬에 의해 주어진 솔루션을 갈 것이라고 생각하지만, 내가 원하는 것을 할 않는 다른 해결 방법을 발견했다. 나는 그것을 여기에 게시하고 있습니다.

루프 시작 부분에 여전히 z = []을 정의 할 수 있습니다. 그런 다음,`np.append (z, x) '로 배열을 추가하십시오. 이것은 궁극적으로 내가 읽어 모든 배열 (N m) 단순히 np.resize`와 크기를 조절할 수 있습니다 루프 후, 같은 크기이기 때문에, 그런 나에게

z = [0,0,0,1,1,1,1,2,3] 

같은 것을 제공 '을 얻을 것이다 무엇 나는 끝났어.

답변

1

@heltonbiker가 대답에 언급 한 것처럼 np.genfromtext과 같은 것이 사용자의 요구에 맞는 경우 가장 좋은 방법입니다. 그렇지 않으면 numpy 배열에 추가하는 것에 대한 this question에 대한 대답을 읽는 것이 좋습니다. 기본적으로 numpy 배열 추가는 매우 느리며 가능할 때마다 피해야합니다.

미리 길이를 알고 있으면 배열을 미리 할당하여 할당 할 수 있습니다.

length_of_file = 5000 
results = np.empty(length_of_file) 
with open('myfile.txt', 'r') as f: 
    for i, line in enumerate(f): 
     results[i] = processing_func(line) 

그렇지 않으면 목록 또는 배열 목록의 목록을 유지하고 numpy 배열로 한꺼번에 변환하십시오.

results = [] 
with open('myfile.txt', 'r') as f: 
    for line in f: 
     results.append(processing_func(line)) 
results = np.array(results) 
3

하지 마십시오. 예를 들어 numpy.genfromtext()을 사용하여 전체 파일을 하나의 배열로 읽습니다.

이 배열을 사용하면 행을 반복하고, 열을 반복하고, 조각을 사용하여 다른 작업을 수행 할 수 있습니다.

또는 일반 목록을 만들고 해당 목록에 많은 배열을 추가 한 다음 끝에 numpy.array(list_of_arrays) 또는 numpy.vstack(list_of_arrays)을 사용하여 목록에서 원하는 배열을 생성 할 수 있습니다.

이 두 번째 방법의 아이디어는 "지연된 배열 만들기"입니다. 먼저 데이터를 찾아서 구성한 다음 원하는 형식의 배열을 최종 형식으로 한 번 만듭니다.

+0

파일에는 numpy가 읽을 수있는 일반적인 방법이없는 복잡한 구조가 있기 때문에 파일의 끝까지 루프해야합니다. 나는 이미 파일을 읽는 내 자신의 방법을 가지고 있으며 완벽하게 괜찮습니다. 단지 제 질문에서 무엇을 요구했는지 구현하고 싶습니다. 그래서 "좋네요". – zephyr

+0

그럼 내 대답에 두 번째 방법을 사용하는 것이 좋습니다. – heltonbiker

관련 문제