하지만 통상적으로 건설 사람과 마찬가지로 나는 그 배열로 np.array
일을 생각 :
내 코드는 다음과 같습니다.
각 column_data
어레이에는 자체 데이터 버퍼 (사용자가 지정한 mmap)가 있습니다. 그러나 np.array(columns)
은 목록의 각 배열에서 값을 읽고 자체 데이터 버퍼를 사용하여 새 배열을 구성합니다.
저는 데이터 버퍼 위치를보고 다른 키 속성을 보려면 x.__array_interface__
을 사용하고 싶습니다. columns
및 data
에 대해 해당 사전을 비교하십시오.
연속 된 블록을 사용하여 mmap에서 2 차원 배열을 생성 할 수 있습니다. 1d frombuffer
어레이를 만들고 reshape
어레이로 만듭니다. transpose
도 계속 해당 버퍼를 사용합니다 (F
순서 사용). 슬라이스와 뷰에서도이를 사용합니다.
하지만 조심하지 않으면 데이터를 다른 곳에 넣는 복사본을 빨리 얻을 수 있습니다. 단순히 data1 = data+1
이 새로운 배열을 만들거나 사전 인덱싱 data[[1,3,5],:]
이됩니다. concatenation
과 동일합니다. bytestring 버퍼로부터
2 개 어레이 :
는
In [534]: x=np.frombuffer(b'abcdef',np.uint8)
In [535]: y=np.frombuffer(b'ghijkl',np.uint8)
는 x,y,z
그들에게
In [536]: z=np.array((x,y))
In [538]: x.__array_interface__
Out[538]:
{'data': (3013090040, True),
'descr': [('', '|u1')],
'shape': (6,),
'strides': None,
'typestr': '|u1',
'version': 3}
In [539]: y.__array_interface__['data']
Out[539]: (3013089608, True)
In [540]: z.__array_interface__['data']
Out[540]: (180817384, False)
데이터 버퍼 위치를 접합하여 새로운 배열을 완전히 다르다
그러나 고쳐 x
아무튼 대한 데이터 변경하기
In [541]: x.reshape(2,3).__array_interface__['data']
Out[541]: (3013090040, True)
도 차원이
In [542]: x.reshape(2,3).T.__array_interface__
Out[542]:
{'data': (3013090040, True),
'descr': [('', '|u1')],
'shape': (3, 2),
'strides': (1, 3),
'typestr': '|u1',
'version': 3}
같은 데이터를 트랜스 않습니다, 다른보기
In [544]: x
Out[544]: array([ 97, 98, 99, 100, 101, 102], dtype=uint8)
In [545]: x.reshape(2,3).T
Out[545]:
array([[ 97, 100],
[ 98, 101],
[ 99, 102]], dtype=uint8)
In [546]: x.reshape(2,3).T.view('S1')
Out[546]:
array([[b'a', b'd'],
[b'b', b'e'],
[b'c', b'f']],
dtype='|S1')
는 큰 1D 배열로 전체 파일을 읽는 시도했다 후 2 차원 배열을 바꿀? – kennytm
최종 배열의 크기를 미리 알고 있습니까? – Julien
@kennytm 데이터는 버퍼 메소드에서 표현할 수없는 열 (예 : 첫 번째 블록은 float, 두 번째는 int)마다 다른 dtyp을 가질 수 있습니다. –