make_pov_180121.py > v0.1-v0.3 > bash 처리(2007년)를 Python으로 구현(2018년) > 43분 처리는 3.5초가 되었다
18968 단어 Bash파이썬borgShapeViewerpovray성능
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)
ADDA v.1.3b6
bash > 43분 처리
[Obsolete] bash + Povray > conv-pov-exec (2008) > x,y,z 좌표 파일을 기반으로 구 입자로 구성된 aggregate의 이미지 생성
에 2007년 무렵의 bash 처리를 게재하고 있다.
처리 내용은 하기
2007년 무렵에 기사 집필자가 작성한 bash 스크립트로 처리를 하면 Povray용 파일 생성까지 43분 걸린다.
2018년의 기사 집필자의 기술을 사용해 bash로 실장해도 늦을 것 같기 때문에, Python으로 실장해 보았다.
데이터 파일
다음과 같은 파일을 읽습니다.
처리 대상 데이터는 N = 206,800의 점을 갖는다.
$ head LN-SHAPE
-0.085861 -0.085861 -8.843684
0.085861 -0.085861 -8.843684
-0.085861 0.085861 -8.843684
0.085861 0.085861 -8.843684
-0.085861 -0.085861 -8.671962
0.085861 -0.085861 -8.671962
-0.085861 0.085861 -8.671962
0.085861 0.085861 -8.671962
-0.085861 -0.257583 -8.500240
0.085861 -0.257583 -8.500240
LN-SHAPE @ Dropbox
코드 v0.1
make_pov_180121.py
import numpy as np
'''
v0.1 Jan., 21, 2018
- output [.pov] file
+ add main()
- add [SHAPE_FORMAT]
- add [CONFIG_FORMAT]
'''
# on Python 3.5.2
# coding rule: PEP8
CONFIG_FORMAT = """
camera {
location <20, 20, -20>
look_at <0, 0, 0>
}
light_source { <100, 200, -100>
color rgb <1.0, 1.0, 1.0>
}
background{color rgb <1.0,1.0,1.0>}
"""
SHAPE_FORMAT = """
sphere { <XXX, YYY, ZZZ>, RRR
texture {
pigment { color rgb <0.7,0.7,0.7> }
finish { ambient 0.4 }
}
}
"""
IN_FILE = 'LN-SHAPE'
OUT_FILE = "shape_180121.pov"
RADIUS = 0.5
def main():
cfg = np.array(CONFIG_FORMAT).reshape(1,)
dat = np.genfromtxt(IN_FILE)
with open(OUT_FILE, 'wb+') as fd:
np.savetxt(fd, cfg, fmt='%s')
for elem in dat:
wrk = SHAPE_FORMAT.replace('XXX', '%s' % elem[0])
wrk = wrk.replace('YYY', '%s' % elem[1])
wrk = wrk.replace('ZZZ', '%s' % elem[2])
wrk = wrk.replace('RRR', '%s' % RADIUS)
wrk = np.array(wrk).reshape(1,)
np.savetxt(fd, wrk, fmt='%s')
print('[%s] is produced' % OUT_FILE)
if __name__ == '__main__':
main()
처리 > 3.5초
$ time python3 make_pov_180121.py
[shape_180121.pov] is produced
real 0m3.452s
user 0m3.392s
sys 0m0.432s
적당히 빨라졌다.
povray shape_180121.pov
는 3초 정도이므로, 수치 광산란 시뮬레이션용 형상의 표시는 총 10초 정도로 끝나게 될 것 같다.주의
bash의 처리가 느리다는 것이 아니라, 빠른 bash를 쓰는 기술을 기사 작성자가 가지고 있지 않다는 것입니다.
또한 최근에는 데이터 처리는 Python3이 주체가 되었기 때문에 Python3에서 구현했습니다.
bash는 필요에 따라 사용합니다.
코드 v0.2,v0.3
make_pov_180121.py
import numpy as np
import sys
'''
v0.3 Jan., 21, 2018
- each particle is colored
- [SHAPE_FORMAT] has color value template
+ [RED], [GREEN], [BLUE]
v0.2 Jan., 21, 2018
- tweak [RADIUS] from 0.5 to 0.25
v0.1 Jan., 21, 2018
- output [.pov] file
+ add main()
- add [SHAPE_FORMAT]
- add [CONFIG_FORMAT]
'''
# on Python 3.5.2
# coding rule: PEP8
CONFIG_FORMAT = """
camera {
location <20, 20, -20>
look_at <0, 0, 0>
}
light_source { <100, 200, -100>
color rgb <1.0, 1.0, 1.0>
}
background{color rgb <1.0,1.0,1.0>}
"""
SHAPE_FORMAT = """
sphere { <XXX, YYY, ZZZ>, RRR
texture {
pigment { color rgb <RED,GREEN,BLUE> }
finish { ambient 0.4 }
}
}
"""
IN_FILE = 'LN-SHAPE'
OUT_FILE = "shape_180121.pov"
RADIUS = 0.25
RGBSET = [
[0.40000000000000002, 0.76078431372549016, 0.6470588235294118],
[0.40000000000000002, 0.76078431372549016, 0.6470588235294118],
[0.9882352941176471, 0.55294117647058827, 0.3843137254901961],
[0.55294117647058827, 0.62745098039215685, 0.79607843137254897],
[0.90588235294117647, 0.54117647058823526, 0.76470588235294112],
[0.65098039215686276, 0.84705882352941175, 0.32941176470588235],
[0.65098039215686276, 0.84705882352941175, 0.32941176470588235],
[1.0, 0.85098039215686272, 0.18431372549019609],
[0.89803921568627454, 0.7686274509803922, 0.58039215686274515],
[0.70196078431372544, 0.70196078431372544, 0.70196078431372544],
[0.70196078431372544, 0.70196078431372544, 0.70196078431372544],
]
X_MAX = 10 # used to set colors
def main():
cfg = np.array(CONFIG_FORMAT).reshape(1,)
dat = np.genfromtxt(IN_FILE)
with open(OUT_FILE, 'wb+') as fd:
np.savetxt(fd, cfg, fmt='%s')
for elem in dat:
wrk = SHAPE_FORMAT.replace('XXX', '%s' % elem[0])
# position
wrk = wrk.replace('YYY', '%s' % elem[1])
wrk = wrk.replace('ZZZ', '%s' % elem[2])
wrk = wrk.replace('RRR', '%s' % RADIUS)
# color
# clidx = (elem[0] - (-50)) / (50 - (-50))
clidx = (elem[0] - (-X_MAX)) / (X_MAX - (-X_MAX))
clidx = clidx * len(RGBSET)
if clidx < 0.0:
clidx = 0.0
acol = RGBSET[int(clidx)]
wrk = wrk.replace('RED', '%s' % acol[0])
wrk = wrk.replace('GREEN', '%s' % acol[1])
wrk = wrk.replace('BLUE', '%s' % acol[2])
wrk = np.array(wrk).reshape(1,)
np.savetxt(fd, wrk, fmt='%s')
print('[%s] is produced' % OUT_FILE)
if __name__ == '__main__':
main()
Reference
이 문제에 관하여(make_pov_180121.py > v0.1-v0.3 > bash 처리(2007년)를 Python으로 구현(2018년) > 43분 처리는 3.5초가 되었다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/90958fb15db6d4a7d564텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)