「boolean logic」はもっと単純化できる場合が多い

Create array based on boolean logic – StackOverflow

boolean logicに囚われると,どんどんcomplicatedになる.回答者の回答は凄いと思うけど,この場合もっとシンプルな話で,

import numpy as np


a = np.array([[  1.00200300e+09,   1.00000000e+00,   2.00000000e+00,
          3.00000000e+00,   4.00000000e+00],
       [  1.00200400e+09,   1.00000000e+00,   2.00000000e+00,
          4.00000000e+00,   5.00000000e+00],
       [  1.00200300e+09,   3.00000000e+00,   4.00000000e+00,
          1.00000000e+00,   2.00000000e+00],
       [  1.00200400e+09,   4.00000000e+00,   5.00000000e+00,
          1.00000000e+00,   2.00000000e+00],
       [  5.70580591e+10,   5.70000000e+01,   5.80000000e+01,
          5.90000000e+01,   6.00000000e+01],
       [  5.70580601e+10,   5.70000000e+01,   5.80000000e+01,
          6.00000000e+01,   6.10000000e+01],
       [  5.70580591e+10,   5.90000000e+01,   6.00000000e+01,
          5.70000000e+01,   5.80000000e+01],
       [  5.70580601e+10,   6.00000000e+01,   6.10000000e+01,
          5.80000000e+01,   5.70000000e+01]])
a[:,1]

array([ 1., 1., 3., 4., 57., 57., 59., 60.])

単に8の倍数でスイッチしているだけなので,

(a[:,1] - 1) // 8 * 0.01

array([-0. , -0. , 0. , 0. , 0.07, 0.07, 0.07, 0.07])
 
 
 
2つ目の問題もそう.

何かもうこんがらがって難しそうにみえるけど,
要は「1引いて8で割った余りで場合分け」すれば良いだけ.

a = np.array([1., 1., 3., 4., 57., 57., 59., 60.])
a#target: [0.0, 0.0, 0.02, 0.03, 0.0, 0.0, 0.02, 0.03]

array([ 1., 1., 3., 4., 57., 57., 59., 60.])

(a - 1) % 8 / 100

array([ 0. , 0. , 0.02, 0.03, 0. , 0. , 0.02, 0.03])

広告
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中