numpy
배열 구조에 더 관심이 있는지 csv 객체에 관심이 있는지 조금 혼란 스럽습니다.
0.2, 4.3, 1.2
1.1, 2.2, 3.1
3.5, 4.1, 1.1, 4300
1.2, 3.3, 1.2
1.5, 2.4, 3.1
3.5, 2.1, 1.1, 4400
savetxt
이 까다로운되지 않습니다 : 같은
np.savetxt
csv 파일 작가는 쉽게 텍스트를 생성 할 수 없습니다. 쓰기 위해 파일을 연 다음 입력 배열을 반복하여 한 번에 하나의 행을 파일에 씁니다.효과적으로 : fmt
는 상기 row
의 각 요소에 대한 필드가 %
for row in arr:
f.write(fmt % tuple(row))
. 간단한 경우에는 fmt = delimiter.join(['fmt']*(arr.shape[1]))
을 생성합니다. 즉, 열의 수를 simgle 필드 fmt
을 반복합니다. 또는 multifield fmt
을 제공 할 수 있습니다.
따라서 사용자 정의 디스플레이를 작성하기 위해 일반 라인/파일 쓰기 메소드를 사용할 수 있습니다. 가장 간단한 방법은 보통 print
명령을 사용하여 구성한 다음 파일로 리디렉션하는 것입니다.
그러나이 작업을 수행 한 후이를 다시 numpy
세션으로 읽는 방법에 대한 질문이 있습니다. np.genfromtxt
은 누락 된 데이터를 처리 할 수 있지만 여전히 구분 기호를 포함해야합니다. 또한 블록을 읽게하는 것이 더 까다 롭습니다 (빈 줄로 구분 된 3 줄). 불가능하지는 않지만 사전 처리를해야합니다.
물론 genfromtxt
도 그리 까다로운 것은 아닙니다. 파일을 한 줄씩 읽고 각 줄을 숫자 또는 문자열 목록으로 변환 한 다음 마스터 목록에서 해당 목록을 수집합니다. 결국에는리스트가 배열로 변환됩니다. 내가 평평 모든 블록 값이있는 TXT에서로드 할 수
In [121]: dt = np.dtype([('lbl',int), ('block', float, (3,3))])
In [122]: A = np.zeros((2,),dtype=dt)
In [123]: A
Out[123]:
array([(0, [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]),
(0, [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]])],
dtype=[('lbl', '<i4'), ('block', '<f8', (3, 3))])
In [124]: A['lbl']=[4300,4400]
In [125]: A[0]['block']=np.array([[.2,4.3,1.2],[1.1,2.2,3.1],[3.5,4.1,1.1]])
In [126]: A
Out[126]:
array([(4300, [[0.2, 4.3, 1.2], [1.1, 2.2, 3.1], [3.5, 4.1, 1.1]]),
(4400, [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]])],
dtype=[('lbl', '<i4'), ('block', '<f8', (3, 3))])
In [127]: A['block']
Out[127]:
array([[[ 0.2, 4.3, 1.2],
[ 1.1, 2.2, 3.1],
[ 3.5, 4.1, 1.1]],
[[ 0. , 0. , 0. ],
[ 0. , 0. , 0. ],
[ 0. , 0. , 0. ]]])
:
내가 가진 텍스트와 같은 배열을 구성 할 수 있습니다
In [130]: txt=b"""4300, 0.2, 4.3, 1.2, 1.1, 2.2, 3.1, 3.5, 4.1, 1.1"""
In [131]: txt
Out[131]: b'4300, 0.2, 4.3, 1.2, 1.1, 2.2, 3.1, 3.5, 4.1, 1.1'
genfromtxt
복잡한 DTYPE을 처리 할 수 있습니다를, 목록에서 순서대로 값을 할당하십시오.
In [133]: data=np.genfromtxt([txt],delimiter=',',dtype=dt)
In [134]: data['lbl']
Out[134]: array(4300)
In [135]: data['block']
Out[135]:
array([[ 0.2, 4.3, 1.2],
[ 1.1, 2.2, 3.1],
[ 3.5, 4.1, 1.1]])
확실하지 않습니다. 그것을 쓰라. savetxt
을 사용하려면 10 열 또는 필드 배열로 바꿔야합니다.
팬더를 사용할 수없는 이유는 무엇입니까? 만약 당신이 아마 numpy의'reshape','ravel','view' 또는 구조적 배열 (http://docs.scipy.org/doc/numpy/user/basics.rec.html)로 뭔가를 할 수있을 것입니다.) – JGreenwell