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

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

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

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

Q&A

解決済

2回答

335閲覧

numpy配列についてです。

Hayato1201

総合スコア220

Python

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

0グッド

0クリップ

投稿2018/04/23 13:28

以下の様なshapeのnumpy配列があります

z1_train: (60000, 50)
y_train: (60000, 10)
z1_train: (60000, 50)
y_u_train: (60000, 10, 10)

それに対して以下の様な演算をしているコードがありました。

Python

1[z1_train]+[y_train]+[z1_train]+y_u_train

これで[]で閉じているものとそうでないものの違いは何でしょうか?また、この際、以下の様なエラーが出ました。

ValueError: could not broadcast input array from shape (60000,50) into shape (60000)

これはどういう事でしょうか?

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

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

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

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

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

mkgrei

2018/04/23 13:35

コードの出処はどこでしょうか。[]で閉じるとリストに入れるので、リストの結合が実行されます。[z1_train, y_train, z1_train] + y_u_trainと同じです。
guest

回答2

0

ベストアンサー

z1_train: (60000, 50)
y_train: (60000, 10)
z1_train: (60000, 50)
y_u_train: (60000, 10, 10)
が本当であれば、エラーは
[z1_test]+[y_test]+[z1_test]+y_u_test
の方にあるべきです。

やっとやりたいことがわかりました。

python

1import numpy as np 2 3n = 60000 4a = np.zeros((n,50)) 5b = np.zeros((n,10)) 6c = np.zeros((n,10,10)) 7print(a.shape) 8print(b.shape) 9print(c.shape) 10 11def merge(a, b, c): 12 d = [a, b, a] + list(c.transpose(1, 0, 2)) 13 return d 14d = merge(a, b, c) 15print(len(d))

投稿2018/04/24 10:17

編集2018/04/24 23:08
mkgrei

総合スコア8560

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

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

hayataka2049

2018/04/24 10:36

[z1_train]+[y_train]+[z1_train] ここまでは無事評価されて(リストの連結)、 + y_u_train でリスト+numpy配列の加算なので、前半をnumpy配列に変換しようとしてshapeが一致しない、のでこけている状況ですよね なのでそのshapeが正しければぜったい動かないと思うんですが、コードを上げた人が動かないままとりあえず上げたのでなければ、shapeが間違ってるのかも・・・
mkgrei

2018/04/24 10:51

import numpy as np a = [np.array([0,1])] b = np.array([[1,2],[3,4]]) print(a+b) の挙動をするはずなので、エラー出ないはずなんですよね。 でもそうか、y_testは60000個ないのか… それなら雰囲気、y_u_trainのshapeがおかしいのか… コードではそんなことなさそうなんですが…
hayataka2049

2018/04/24 11:05

前提として、 >>> [1,2,3]+np.array([4,5,6]) #=>array([5, 7, 9]) なので、list+numpy配列の演算だとリストの方はnumpy配列に変換されるような処理が走るのだろう、と私は勝手に思っている訳です(ちゃんと追っていないので実際どうなっているのかは知らない) それを踏まえた上で、 >>> x = [z1_train]+[y_train]+[z1_train] # 中身はnp.zerosでshapeだけ揃えた配列 >>> np.array(x) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: could not broadcast input array from shape (60000,50) into shape (60000) なので、shape=(3,60000,ふにゃふにゃ)の配列に変換できないよ、shape揃えて出直してこいよ、というエラーと見ました
mkgrei

2018/04/24 11:05

ValueError: operands could not be broadcast together with shapes (3,60000) (60000,10,10) あれ、shapeの情報が正しいのならエラーはこんな感じになるんですね。
mkgrei

2018/04/24 11:13

あとはpython2か昔のnumpyの振る舞いの違いか…
Hayato1201

2018/04/24 11:39

自分の環境ですと、エラーに関してはやはり質問の通りになります。 コンマで繋ぐとはz1_train,y_train,z1_train,y_u_train,の様にするという事でしょうか?
mkgrei

2018/04/24 13:46

失礼。 pythonistaの実装が異なるようですね。 Colab上で質問通りのエラーを確認しました。 となると、環境によっては万が一githubのコードが走る可能性もあるのだろうか…
Hayato1201

2018/04/24 14:24

ちなみにhttps://github.com/rarilurelo/keras-VAE/blob/master/training_m2.pyのコメントアウトされているonly labeled dataの方では動かす事ができました。そもそも[]で囲む理由が分からないのですが、これはどういう意味でしょうか?numpy配列をリストにしているという事ですか?
hayataka2049

2018/04/24 14:42

[]で囲むと、当該numpy配列を要素に持つ長さ1のリストになります。リストの足し算は連結なので、mkgreiさんが仰っていたのは[z1_train]+[y_train]+[z1_train]は[z1_train, y_train, z1_train]と等価、ということですね。その上で、こう書いてもエラーになるので、そもそも変なプログラムであるという話です(単に変なのか、データのshapeの間違いなのか、環境によって走ったり走らなかったりするのかは不明)
Hayato1201

2018/04/25 03:06

ありがとうございました!流石ですね、動きました。助かります!
hayataka2049

2018/04/25 03:12

あらま・・・見落としてた。先に見るべきでした
Hayato1201

2018/04/25 10:31

すみません、こちらの回答はベストアンサーとさせていただきましたが、このfitのインプットの形がなぜこの様になるかいまいちよく分からないので、新しい質問を立てました。もしよかったらそちらもお答えいただけるとありがたいです。なぜこれで半教師あり学習のラベルありデータなしデータという様に分かれるのかが良くわかりません。。。
guest

0

z1_train: (60000, 50)

y_train: (60000, 10)
z1_train: (60000, 50)
y_u_train: (60000, 10, 10)

python

[z1_train]+[y_train]+[z1_train]+y_u_train

こうすることの合理的な理由は思いつきません・・・ numpyよくわかっていない人がshapeを合わせようとして書いた、ような気がします。

投稿2018/04/23 13:47

hayataka2049

総合スコア30933

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

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

Hayato1201

2018/04/24 09:52

回答ありがとうございます。だとしたらこのエラーはどうすれば直せるでしょうか??
hayataka2049

2018/04/24 10:07

書いた人が何をしたかったのか、私にはよくわからないので勘弁してください。。。
mkgrei

2018/04/24 22:44 編集

半教師あり学習の教師データ生成のための、np.arrayによるブロードキャストらしいですね。←正しくないですね。結合したいけど、結合すべき次元が後ろにあるから軸を入れ替える必要があることと、ブロードキャストされないようにnp.arrayからlistにする必要がありますね。 リストの足し算は必要なく、コンマで繋げばよかったものかと思われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問