質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

462閲覧

np.deleteを使ってデータを書き換えたい

退会済みユーザー

退会済みユーザー

総合スコア0

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/11/22 13:16

編集2018/11/23 06:41

コードはデータの中の外れ値を見つけて削除するというものです。
for文を回して条件に合わなければnp.deleteでデータから削除したいのですが、dumpしたファイルを見直してもdeleteされていませんでした。

for文で条件に合わない(i,j)の組をリストにappendし、for文の外でnp.deleteを実行するというような方法も試してみましたが失敗しました。
そもそもnp.deleteの使い方が間違っているのでしょうか。
当方プログラミング1週間目のド素人なので、どなたかご教授いただければ幸いです。

html

1 2def process() : 3 4 import numpy as np 5 import joblib 6 7 data = joblib.load('data1') 8 l1 = len(data) 9 coodinate = [] 10 for i in range(l1) : 11 12 bridge = data[i][:,2] 13 sample = data[i][:,3] 14 15 Q3_b, Q1_b = np.percentile(bridge, [75, 25]) 16 IQR_b = Q3_b - Q1_b 17 18 Q3_s, Q1_s = np.percentile(sample, [75, 25]) 19 IQR_s = Q3_s - Q1_s 20 21 outlier1_b = Q3_b + 1.5*IQR_b 22 outlier2_b = Q1_b - 1.5*IQR_b 23 24 outlier1_s = Q3_s + 1.5*IQR_s 25 outlier2_s = Q1_b - 1.5*IQR_s 26 27 l2 = len(sample) 28 for j in range(l2) : 29 if bridge[j] > outlier1_b or bridge[j] < outlier2_b or sample[j] > outlier1_s or sample[j] < outlier2_s : 30 np.delete(data[i],j,0) 31 print(i,j) 32 else : 33 pass 34 joblib.dump(data,'data_normalized') 35 36process()

np.deleteを使うのは諦め、以下のように書き換えました。

html

1for j in range(l2) : 2 if bridge[j] > outlier1_b or bridge[j] < outlier2_b or sample[j] > outlier1_s or sample[j] < outlier2_s : 3 pass 4 else : 5 list_i.append(data[i][j])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コードを詳しく追ってはいませんが、使い方が間違っているのは確かなようです。

Return a new array with sub-arrays along an axis deleted
numpy.delete — NumPy v1.15 Manual

単に呼び出しただけでは、元の配列に対して何の副作用も起こしません。

投稿2018/11/23 05:24

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/23 06:42 編集

回答ありがとうございます。np.deleteのでは上手くいかなかったので、条件に合わないリストを削除するのではなく、合うものだけを空のリストに加えるというように書き換えることで解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問