1
1

More than 1 year has passed since last update.

Pythonにおける備忘録

Last updated at Posted at 2022-11-12

概要

pythonにおける小技を自分用にまとめておく

目次

  • 空のデータフレーム作成
  • np.whereを用いた条件を満たす行列要素の抽出
  • リストの中から重み(確率)付けしてランダムに抽出

空のデータフレーム作成

空のデータフレームを作成し,リストを格納した.

df = pd.DataFrame()
a = [0, 1, 2] 
df['a'] = a #リスト格納
print(df)

>>>    a
    0  0
    1  1
    2  2

Jupyter Notebookで実装している場合,以下によってDataFrameを全て表示することが可能である.

pd.set_option('display.max_rows', None) #indexに相当
pd.set_option('display.max_columns', None)

numpyのスライスの注意点

範囲外の位置を指定してもエラーにならない。
開始位置が範囲外の場合は空リストになり、終了位置が範囲外の場合は開始位置以降の全要素が返る。

array_3d = np.random.randint(2, size=(3, 3, 3))
for x0 in range(3):
    for y0 in range(3):
        for z0 in range(3):
            AN = np.sum(array_3d[x0-1:x0+2, y0-1:y0+2, z0-1:z0+2] > 0)
            neighbour_values = array_3d[x0-1:x0+2, y0-1:y0+2, z0-1:z0+2].flatten()
            print(x0, y0, z0, AN, neighbour_values)

>>> 0 0 0 0 []
    0 0 1 0 []
    0 0 2 0 []
    0 1 0 0 []
    0 1 1 0 []
    0 1 2 0 []
    0 2 0 0 []
    0 2 1 0 []
    0 2 2 0 []
    1 0 0 0 []
    1 0 1 0 []
    1 0 2 0 []
    1 1 0 0 []
    1 1 1 14 [1 0 1 0 0 1 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 0]
    1 1 2 9 [0 1 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0]
    1 2 0 0 []
    1 2 1 8 [0 0 1 0 0 1 1 0 1 1 1 0 0 1 0 1 0 0]
    1 2 2 5 [0 1 0 1 0 1 1 0 1 0 0 0]
    2 0 0 0 []
    2 0 1 0 []
    2 0 2 0 []
    2 1 0 0 []
    2 1 1 10 [0 1 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 0]
    2 1 2 6 [1 1 0 1 1 0 0 1 1 0 0 0]
    2 2 0 0 []
    2 2 1 6 [1 0 1 1 1 0 0 1 0 1 0 0]
    2 2 2 3 [0 1 1 0 1 0 0 0]

np.whereを用いた条件を満たす行列要素の抽出

a = np.random.randint(10, size = (3,4,5))
b = np.where(a==5)
print(a)
print(b)

>>> [[[9 5 1 4 6]
      [1 9 1 3 3]
      [0 7 4 9 4]
      [1 8 5 0 8]]

     [[2 3 8 3 5]
      [8 9 4 0 4]
      [4 1 2 9 3]
      [8 9 7 6 3]]

     [[0 1 7 8 0]
      [3 8 2 8 8]
      [4 1 7 7 5]
      [6 5 7 7 5]]]
     (array([0, 0, 1, 2, 2, 2]), array([0, 3, 0, 2, 3, 3]), array([1, 2, 4, 4, 1, 4]))

データ型はタプルであることが下記の通りわかる.

print(type(b))
print(b[0])

>>> <class 'tuple'>
    [0 0 1 2 2 2]

この場合,zip関数を用いることで条件を満たす各軸の要素を抽出可能である.

for x0, y0, z0 in zip(b[0], b[1], b[2]):
    print(x0, y0, z0)

>>> 0 0 1
    0 3 2
    1 0 4
    2 2 4
    2 3 1
    2 3 4

リストの中から重み(確率)付けしてランダムに抽出

random.choices()で,リストから重み(確率)付けしてランダムに要素を取得できる.取得してくる要素数を指定可能で,重み(確率)を指定できる.その重み(確率)の総和は0にさえならなければ特にエラーにはならない.
また,リストで返されるため注意が必要である.

list1 = [1, 3, 5, 7, 9]
list2 = [0.2, 0.3, 2, 3, 1]

a = random.choices(list1, weights=list2, k=1)
print(a)
print(a[0])

>>> [5]
   5
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1