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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

239閲覧

pythonで次のコードを簡単にしたい。

physics303

総合スコア89

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/25 02:51

編集2018/10/25 03:29

次のような計算をしています。
Xというのは1次元配列で、
X = np.array([1,2,4,3,1,3,2,4,6,4,2,…])
のような感じです。

python

1 2dim = 4 3input_vec = np.zeros((len(X),dim+1)) 4 5Sum1 = np.zeros((dim+1,dim+1)) 6Sum2 = np.c_[np.zeros(dim+1)] #縦ベクトルにしておく 7 8 for j in range(0,len(X)): 9 input_vec[j] = np.array([[X[j]**0,X[j]**1,X[j]**2,X[j]**3,X[j]**4]]) 10 11 Sum1 = Sum1 + np.dot(input_vec[[j]].transpose(),input_vec[[j]]) 12 Sum2 = Sum2 + Y[j]*input_vec[[j]].transpose()

dim = 4 の場合はこのままでも良いのですが、dimを書き換えた時にちゃんと動くように、

python

1 2input_vec = np.zeros((len(X),dim+1)) 3 4Sum1 = np.zeros((dim+1,dim+1)) 5Sum2 = np.c_[np.zeros(dim+1)] #縦ベクトルにしておく 6 7 for j in range(0,len(X)): 8 for i in range(0,dim+1): 9 input_vec[j][i] = X[j]**i 10 11 Sum1 = Sum1 + np.dot(input_vec[[j]].transpose(),input_vec[[j]]) 12 Sum2 = Sum2 + Y[j]*input_vec[[j]].transpose()

と書き換えましたが、エラーがでます。なぜでしょう。

エラー内容:
IndexError: index 1 is out of bounds for axis 0 with size 1

エラーがでる行は
input_vec[j][i] = X[j]**i
の行です。

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

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

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

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

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

y_waiwai

2018/10/25 02:55

どの行でそのエラーが出るんでしょうか。質問は編集できますんで、編集で修正してください
tiitoi

2018/10/25 03:17 編集

まず記載コードの意図、つまり入力がなにで、出力としてどのような値を計算したいのかを説明していただけますか。
physics303

2018/10/25 03:30

入力はX = np.array([1,2,4,3,1,3,2,4,6,4,2,…])です。出力はSum1とSum2です。
guest

回答1

0

ベストアンサー

ふたつあるfor文の中で配列の大きさより大きいindexを指定しているのかと思います。for文の範囲を確認するのと、配列の大きさが0の場合(今回はおそらくない?)の例外処理をする必要があるかと思います。

投稿2018/10/25 03:24

yskk

総合スコア257

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

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

physics303

2018/10/25 03:41

ありがとうございます。 配列の大きさは len(X) × (dim + 1) で forループは (0 〜 len(x))×(0 〜(dim + 1))で回しているので配列の大きさより大きいindexを指定しているってことはないと思うのですが…
yskk

2018/10/25 03:51 編集

(0 〜 len(x))が悪いようなきがします。xの要素数が10だとすると範囲は0~9になるはずです。 (0 〜 len(x)-1)ではないですか。dim+1も同様に、dim+1-1
yskk

2018/10/25 03:54

ごめんなさい、他の言語のrangeの挙動と混ざってるかもです。違ってたらすみません
yskk

2018/10/25 03:59

いずれにせよ input_vecの範囲外にアクセスしてるのは確かだと思うので、input_vecに期待通りの値が入っているか、エラーがでるのはi,jがそれぞれ何番のときかを確認してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問