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

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

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

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

13043閲覧

pytorchで条件を満たす列だけ抽出したい

Moririn_1881

総合スコア18

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/10/26 15:13

閲覧ありがとうございます。
タイトルの通り、条件を満たすテンソルを抽出したいと考えております。
具体的には3行めが"0"の列を抽出したいです。
普通の配列なら、リスト内包表記を用いて下記の様に抽出できます。

python

1>>> li=[[1, 2, 0], [3, 4, 1], [5, 6, 0], [7, 8, 0]] 2>>> li = [row for row in li if row[2] == 0] 3>>> li 4[[1, 2, 0], [5, 6, 0], [7, 8, 0]]

しかしながら、同様の機能をpytorchのtensorに対して実行することができません。
tolistメソッドを用いてもリストにならず、無理やり内包表記を使うとリスト内にtensorが3つ入ってしまいます。

Python

1>>> import torch 2 3>>> a = torch.tensor([[1, 2, 0], [3, 4, 1], [5, 6, 0], [7, 8, 0]]) 4>>> a 5tensor([[1, 2, 0], 6 [3, 4, 1], 7 [5, 6, 0], 8 [7, 8, 0]]) 9 10>>> a.tolist() 11[[1, 2, 0], [3, 4, 1], [5, 6, 0], [7, 8, 0]] 12>>> a #リストにならず? 13tensor([[1, 2, 0], 14 [3, 4, 1], 15 [5, 6, 0], 16 [7, 8, 0]]) 17 18>>> a = [row for row in a if row[2] == 0] 19>>> a #リスト内にtensorが3つ入ってしまった 20[tensor([1, 2, 0]), tensor([5, 6, 0]), tensor([7, 8, 0])] 21 22>>> a = torch.tensor(a) #無理やりtensorに戻そうとしてもうまくいかず... 23Traceback (most recent call last): 24 File "<stdin>", line 1, in <module> 25TypeError: only integer tensors of a single element can be converted to an index

どなたかtensorに対して任意の行を抽出する方法をご存知でしたら、お教えください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

python

1>>> a 2tensor([[1, 2, 0], 3 [3, 4, 1], 4 [5, 6, 0], 5 [7, 8, 0]]) 6 7 8>>> a[a[:, 2] == 0] 9tensor([[1, 2, 0], 10 [5, 6, 0], 11 [7, 8, 0]])

投稿2020/10/27 00:38

kirara0048

総合スコア1399

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

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

Moririn_1881

2020/10/27 00:54

まさに探していたものです。 ありがとうございます????
guest

0

すごく簡単な回答で申し訳ないのですが(おそらく質問者さんもうっかり見落としているだけと思いますが…)
、tolist()は非破壊メソッドなので、
a = a.tolist()
とすれば期待通りの動きになると思います。
tensorのまま処理する方法については、後で思いついたら追記しておきます。

投稿2020/10/27 00:38

Ryomax

総合スコア68

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

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

Moririn_1881

2020/10/27 00:53

tolistは非破壊メソッドだったんですね、うっかりしてました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問