2011-03-11 5 views
1

numpy 데이터를 하나의 python 스크립트에서 다른 파이프로 파이프 할 수 있습니까?Linux의 파이프 numpy 데이터?

script1.py이 같다고 가정 해

x = np.zeros(3, dtype={'names':['col1', 'col2'], 'formats':['i4','f4']})

print x

는 리눅스 명령에서, 나는 다음과 같은 실행한다고 가정하자 :

python script1.py | script2.py

script2.py 얻을 것이다 데이터를 다음과 같이 파이프로 처리 입력 (stdin)? 데이터가 여전히 numpy와 동일한 형식입니까? (예를 들어, script2.py에서 numpy 연산을 수행 할 수 있도록)?

답변

2

아니요, 데이터는 파이프를 통해 텍스트로 전달됩니다. 서면으로 쓰기 전에 script1.py의 데이터를 직렬화해야하며, 읽고 난 후에 script2.py으로 역 직렬화해야합니다.

+0

직렬화를 빠르고 간단하게하는 방법은 python'repr' 함수를 사용하는 것입니다. script1.py의'print x'를'print repr (x)'로 바꾸고 script2.py의 출력을 비 직렬화하기 위해 script2.py를 호출합니다. – srgerg

+0

여러분, 고마워요. 나는 바이너리 파일에 쓰여질 필요가있는 배열이 있는데, 파이핑이 전체 프로세스를 더 빠르게 만들 것이라고 생각했다. (즉, 하나의 프로세스가 계산되고 하나의 프로세스가 쓴다.) 이 작업을 더 빨리 수행 할 수있는 다른 아이디어가 있습니까? – user3262424

+0

'mmap'은 세상을 돌아 가게합니다. –

3

saveload 기능을 확인하십시오. 나는 그들이 파일 대신 파이프를 통과하는 것에 반대 할 것이라고 생각하지 않는다.

0

this question을 참조하십시오.

subprocess 모듈을 사용하려는 경우 프로세스간에 메모리를 공유하여 numpy 배열을 빠르게 전달할 수 있습니다. 그렇지 않다면 파일을 저장하는 것이 바지를 파이핑에서 벗어나는 것을 발견했습니다. 배열을 문자열로 변환하는 것이 너무 느리기 때문일 수 있습니다.