numpy의 numpy.memmap 함수의 사용법

2893 단어
정의:
numpy.memmap(filename,datatype[optional],mode[optional],offset[optional] ,shape[optional],order[optional])
기능:numpy 모듈 기능, 디스크 바이너리 파일에 저장된 그룹의 메모리 맵을 만듭니다.
매개변수:
filename(파일 이름):str, 유사한 파일의 대상 또는 pathlib.path 실례, 그룹 데이터 버퍼의 파일 이름이나 파일 대상으로 사용됩니다.
데이터 type (데이터 형식): 데이터 형식, 파일 내용을 설명하는 데이터 형식을 선택할 수 있습니다.기본값은 uint8입니다.
mode(모드):'r+','r','r+','c', 선택 가능(기본값 r+)
offset (바이트 오프셋): 이 파일에서 그룹 데이터는 이 오프셋에서 시작합니다.편이량은 바이트 단위로 측정되기 때문에, 보통 dtype 바이트 크기의 배수이어야 한다.모드로!='r'일 때 파일 끝을 초과하는 양의 편이도 유효하다.이 파일은 추가 데이터를 수용하기 위해 확장될 것입니다.기본적으로memmap은 파일의 시작부터 시작합니다. filename이 파일 바늘 fp와 fp라도.tell()!= 0.
shape (모양):tuple, 필요한 진열 모양.모델=='r'및offset 이후의 나머지 바이트 수가 dtype의 바이트 크기의 배수가 아니라면 shape를 지정해야 합니다.기본적으로 반환되는 배열은 1-D이며 요소 수는 파일 크기와 데이터 유형에 따라 결정됩니다.
order(순서): {'C','F'},
파일 모드:
r: 읽기 전용으로 기존 파일을 엽니다.
"r+": 읽기 및 쓰기 위해 기존 파일을 엽니다.
"w+": 기존 파일을 만들거나 덮어씁니다.
"c"쓰기 시 복사: 분배는 메모리의 데이터에 영향을 주지만 변경 사항은 디스크에 저장되지 않습니다.디스크의 파일은 읽기만 합니다.
예:
from tempfile import mkdtemp
import os.path as path
import numpy as np

data=np.arange(12,dtype='float32')
data.resize(3,4)
filename = path.join(mkdtemp(),'newfile.dat')

fp = np.memmap(filename,dtype='float32',mode='w+',shape=(3,4))
#          fp,   0.
fp#  fp
Out[2]: 
memmap([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]], dtype=float32)
fp[:] = data[:]
fp#  fp
Out[4]: 
memmap([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.]], dtype=float32)

fp.filename == path.abspath(filename)
Out[5]: True

del fp#  fp
newfp = np.memmap(filename, dtype='float32', mode='r', shape=(3,4))
newfp
Out[8]: 
memmap([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.]], dtype=float32)

fpr = np.memmap(filename, dtype='float32', mode='r', shape=(3,4))
fpr.flags.writeable
Out[10]: False#  fpr   

fpc = np.memmap(filename, dtype='float32', mode='c', shape=(3,4))
fpc.flags.writeable
Out[12]: True
fpc
Out[13]: 
memmap([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.]], dtype=float32)

fpc[2,:] = 1
fpc
Out[15]: 
memmap([[0., 1., 2., 3.],
        [4., 5., 6., 7.],
        [1., 1., 1., 1.]], dtype=float32)

fpr#             
Out[16]: 
memmap([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.]], dtype=float32)

fpo = np.memmap(filename, dtype='float32', mode='r', offset=16)
fpo#  offset        
Out[18]: memmap([ 4.,  5.,  6.,  7.,  8.,  9., 10., 11.], dtype=float32)

 
 
참조 번역:
numpy.memmap:https://docs.scipy.org/doc/numpy/reference/generated/numpy.memmap.html

좋은 웹페이지 즐겨찾기