pyenv+minicondaを使った環境構築
install_python.sh
#!/bin/bash
set -eu
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PATH:$PYENV_ROOT/bin
case $OSTYPE in
darwin*)
if [ ! -e $PYENV_ROOT ]; then
if ! type brew; then
echo "please install homebrew (https://brew.sh/)" >&2
exit 1
fi
brew install pyenv
ln -sf /usr/local/opt/pyenv $PYENV_ROOT
fi
;;
linux*)
if [ ! -e $PYENV_ROOT ]; then
if ! type curl; then
echo "please install 'curl'" >&2
exit 1
fi
(cd && curl https://pyenv.run| bash)
fi
;;
esac
eval "$(pyenv init -)"
conda3='miniconda3-latest'
if [ ! -d $PYENV_ROOT/versions/$conda3 ]; then
pyenv install $conda3
fi
pyenv global $conda3
cat <<'EOT'
please define the environment
(see: https://github.com/pyenv/pyenv)
-------------------------------------
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PATH:$PYENV_ROOT/bin
eval "$(pyenv init -)"
-------------------------------------
EOT
テンプレート集
練習のため競技プログラミングをやっていたときや、その他ちょっとハマったものまとめ。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
path操作
"""
import os
# homeディレクトリのpath
home_dir = os.path.expanduser("~")
# dpath内のファイル名一覧を取得
fname_list = os.listdir(dpath)
import glob
# dpath内にあるファイルのパス一覧を取得
file_list = glob.glob(os.path.join(dpath, "*"))
"""
ファイル入力
"""
# 改行区切りのファイルを読み込む
data = []
with open("text_file", "r") as lines:
for line in lines:
data.append(line.rstrip("\n"))
"""
標準入力
"""
# 1文字受け取りint型に変換
x = int(input())
# 空白区切りの文字を受け取る
lines = input().split()
# 空白区切りの文字を受け取り整数に変換
n1, n2 = map(int, input().split())
# 空白区切りの文字を受け取りint型に変換したリスト
lines = list(map(int, input().split()))
# n行の数字を受け取る
n = int(input())
a = [int(input()) for i in range(n)]
"""
編集
"""
# str型に変換して結合
s = ''.join(list(map(str, a)))
# 置換
input().replace('before', 'after')
# 正の数の四捨五入 (0.5を足してintを取る)
int(x + 0.5)
# 正の数の小数切り上げ (マイナス無限大への丸め込み)
-(-x // 1)
# 五捨五入(python3から0.5ぴったりの場合は偶数(0と1で0)の方に丸められる。)
round(x)
# 符号を返す
def bit(x):
# return 1 - (x <= 0) - (x < 0)
return (x > 0) - (x < 0)
# python2ではビルトイン関数があった
# cmp(x,y)は、x>yだと1、x=yだと0、x<yだと-1を返す
# cmp(x, 0)
# 関数かどうか
from inspect import isfunction
isinstance(bit, isfunction)
# 実数かどうか
import numbers
isinstance(x, numbers.Real)
# 0埋め
s = "{:04d}".format(n)
s = str(n).zfill(4)
# 空白埋め
width = 20
s.ljust(width)
s.rjust(width)
s.center(width)
"""
正規表現
"""
import re
# 最長マッチ
result = re.search(r".*/", "a/b/c").group(0)
#>>> a/b/
# 最短マッチ
result = re.search(r".*?/","a/b/c").group(0)
#>>> a/
"""
多次元配列
"""
width = 2
height = 2
# 初期化
data = [[0 for j in range(width)] for i in range(height)]
"""
注意
data = [[0]*width]*height ではダメ
(参考 http://qiita.com/utgwkk/items/5ad2527f19150ae33322#fnref3)
"""
"""
numpy
"""
import numpy as np
# 文字列(1文字)を取り扱う
s = np.zeros(n, dtype=str)
"""
注意
これだと s.dtype = dtype(';<U1') となり1文字までしか格納できない
"""
# 文字列(上限32文字)を取り扱う
s = np.zeros(n, dtype=';<U32')
# order sort
dtype = [("g", int), ("s", int), ("b", int)]
medal = [0] * N
for i in range(N):
g, s, b = map(int, input().split())
medal[i] = (g, s, b)
medal = np.array(medal, dtype=dtype)
medal = np.sort(medal, order=["g", "s", "b"])
# N x N行列
import numpy as np
zero = np.zeros([n, n], dtype=np.int)
'''
-----------------→ y
| [[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]]
x
'''
# 配列の結合
a = np.arange(0, 5)
b = np.arange(6, 11)
new = np.concatenate([a, b])
# 行列式
A = np.array([[1, 2], [3, 4]])
determinant = np.linalg.det(A)
# ラジアンに変更
theta = 180
np.radians(theta)
# 角度に変更
radian = np.pi
np.degrees(radian)
"""
標準出力
"""
# 空白区切りで出力
print("x", "y")
# '/'区切りで出力
print('/'.join(["A", "B", "C"]))
# カンマ区切りで出力
print(",".join(["A", "B", "C"]))
"""
ファイルに出力
"""
with open("txt_file", "w") as obj:
print("x", file=obj)
obj.write("y\n")
"""
set (重複なし集合)
.add
.remove
.discard
"""
A = set([1, 2, 3, 4])
B = set([3, 4, 5, 6])
# A ∪ B (和集合)
C = A | B
# A ∩ B (積集合)
C = A & B
# 部分集合かどうか
C.issubset(A)
"""
bashコマンドを実行
"""
# 1. 実行するだけ
import subprocess
cmd = "mkdir temp"
subprocess.call(cmd, shell=True)
# 1. 実行結果を受け取る
resutls = str(subprocess.check_output(["ls", "temp"]))
Use Type 1 Font
論文投稿時に"Type 3 Font error"に遭遇。その対処方法。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
# Type 1 PostScript fonts
plt.rcParams['ps.useafm'] = True
plt.rcParams['pdf.use14corefonts'] = True
# tex typesetting
plt.rcParams['text.usetex'] = True
plt.rcParams['text.latex.preamble'] = [r'\usepackage{sansmath}', r'\sansmath'] # Force sans-serif math mode for axes labels
# plt.rcParams['font.family'] = 'sans-serif' # regular text
# plt.rcParams['font.sans-serif'] = 'Helvetica' # choose a font here
plt.rcParams['font.family'] = 'serif' # regular text
plt.rcParams['font.sans-serif'] = 'Times New Roman' # choose a font here
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.set_title("title")
ax.set_xscale("log")
ax.set_xlim(1e+1, 1e+2)
ax.set_xlabel(r"$\log_{10}{x}$")
ax.set_ylim(0, 10)
ax.set_ylabel(r"$-y$")
fig.savefig("type1_postscript.pdf")