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

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

新規登録して質問してみよう
ただいま回答率
85.47%
多次元配列

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

NumPy

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

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

配列

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

Q&A

3回答

863閲覧

多次元配列の変換をしたい

jagaimo_potato

総合スコア4

多次元配列

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

NumPy

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

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

配列

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

0グッド

0クリップ

投稿2020/05/17 23:47

多次元配列の要素の中で値が負のものをすべて0に変換するプログラムを書きたいのですが、エラーが出てしまい上手くいきません。どのように書き換えればよいのでしょうか?

example

1多次元配列 2 list=[[[-1,0,1][5,100,3][45,12,56]] 3 [[-151,52,10][23,14,-2][-34,-5,121]]] 4 5 6を変換して 7 8 9re_list=[[[0,0,1][5,100,3][45,12,56]] 10 [[0,52,10][23,14,0][0,0,121]]] 11 12 13にしたい

最初に書いたコード

re_list=[i if i<0 else 0 for i in list]

error
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

訂正後

re_list=[i if i<0 else 0 for i in (list).all()]

再エラー
TypeError: 'numpy.bool_' object is not iterable

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

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

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

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

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

x98000

2020/05/17 23:54

元の list はPythonのlist形式ですよね?カンマが足りてないようなので修正してください。
guest

回答3

0

エラーを見る限りこのオブジェクトlistはnumpy.ndarrayインスタンスですよね?
それならば次のように書けます。

Python

1arr[arr<=0] = 0

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

このエラーは i<0 を真偽値に変換できないことに由来します。
メッセージに従って仮にa.allを適用するとするならば、次のように書けばとおります。

Python

1re_list=[i if (i<0).all() else 0 for i in arr]

しかしこれは想定どおりには動作しないでしょう。

iには何が束縛されるのか、i<0は何を返すのか、allメソッドはどんな働きをするのか。
この辺りを抑えておかないとなかなか理解し難いと思います。

投稿2020/05/18 00:26

編集2020/05/18 00:38
LouiS0616

総合スコア35660

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

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

0

Numpyなのでこんなかんじに条件処理ができますよ。

投稿2020/05/18 00:37

ForestSeo

総合スコア2720

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

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

0

python

1list_ = [[[-1, 0, 1], [5, 100, 3], [45, 12, 56]], 2 [[-151, 52, 10], [23, 14, -2], [-34, -5, 121]]]

を前提とすると、

python

1re_list_ = [[[item if item >= 0 else 0 for item in list_sub2] 2 for list_sub2 in list_sub] for list_sub in list_]

ですかね。

投稿2020/05/18 00:21

x98000

総合スコア1096

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問