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

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

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

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

Q&A

解決済

2回答

907閲覧

データの置き換えができない

874-3175-8...

総合スコア6

Python

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

0グッド

0クリップ

投稿2021/05/24 05:50

分からないこと

あるデータをXとyに置き換えたいのですが、その方法が分かりません。

入力コード

import numpy as np data1 = np.array([[0, 10, 20, 30, 40, 50], [100, 110, 120, 130, 140, 150], [200, 210, 220, 230, 240, 250], [300, 310, 320, 330, 340, 350], [400, 410, 420, 430, 440, 450], [500, 510, 520, 530, 540, 550], [600, 610, 620, 630, 640, 650], [700, 710, 720, 730, 740, 750], [800, 810, 820, 830, 840, 850]]) target1 = np.array([0, 0, 1, 2, 1, 3, 3, 0, 4])

前提・実現したいこと

この data1 と target1 から,クラス0とクラス3の分類を、特徴量0, 2, 5に関して行います。その前処理として、X と y を以下のように取り出したいです。

X = [[ 0, 20, 50], [100, 120, 150], [500, 520, 550], [600, 620, 650], [700, 720, 750]]) y = [0, 0, 3, 3, 0]

試したこと・エラーコード

#入力コード X = data1[np.isin(target1, [0, 3]), [0,2,5]] y = target1[np.isin(target1, [0, 3])]
#エラーコード IndexError Traceback (most recent call last) <ipython-input-111-9f96e170bcd5> in <module>() ----> 1 X = data1[np.isin(target1, [0, 3]), [0,2,5]] IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (5,) (3,)

エラーの意味はおおよそ理解できるのですが、解決方法が分からないです。

利用環境

Google Colaboratory を使っています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

こういうときは、numpy.ix_ を間に入れます。
https://numpy.org/doc/stable/reference/generated/numpy.ix_.html

python

1X = data1[np.ix_(np.isin(target1, [0, 3]), [0, 2, 5])]

こちらも参考にしてください。
https://numpy.org/devdocs/reference/arrays.indexing.html#boolean-array-indexing

投稿2021/05/24 07:31

bsdfan

総合スコア4599

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

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

874-3175-8...

2021/05/24 08:23

ありがとうございます。 大変恐縮なんですが、y の入力をもう少し汎用的にすることはできるでしょうか? もし指定するクラスが多いと、それを全て、[0,1,5,6,7] のように入力するのは面倒だと思いまして。
874-3175-8...

2021/05/24 08:28

すいません、できました。ありがとうございます。
guest

0

こうやればできます。

python

1>>> import numpy as np 2>>> data1 = np.array([[0, 10, 20, 30, 40, 50], 3... [100, 110, 120, 130, 140, 150], 4... [200, 210, 220, 230, 240, 250], 5... [300, 310, 320, 330, 340, 350], 6... [400, 410, 420, 430, 440, 450], 7... [500, 510, 520, 530, 540, 550], 8... [600, 610, 620, 630, 640, 650], 9... [700, 710, 720, 730, 740, 750], 10... [800, 810, 820, 830, 840, 850]]) 11>>> target1 = np.array([0, 0, 1, 2, 1, 3, 3, 0, 4]) 12>>> 13>>> X = data1[:,[0,2,5]][[0,1,5,6,7],:] 14>>> y = target1[[0,1,5,6,7]] 15>>> print(X) 16[[ 0 20 50] 17 [100 120 150] 18 [500 520 550] 19 [600 620 650] 20 [700 720 750]] 21>>> print(y) 22[0 0 3 3 0]

投稿2021/05/24 07:30

ppaul

総合スコア24666

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

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

874-3175-8...

2021/05/24 08:23

ありがとうございます。 大変恐縮なんですが、y の入力をもう少し汎用的にすることはできるでしょうか? もし指定するクラスが多いと、それを全て、[0,1,5,6,7] のように入力するのは面倒だと思いまして。
874-3175-8...

2021/05/24 08:28

すいません、解決しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問