2016-11-10 6 views
0

私はPython(以前のMatlabユーザー)にはとても新しいです。Pythonは配列内の要素を入れます

Iは

y_pred = [None] * 128 

test_idxアレイ私はy_predアレイresults

array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
     0, 0, 0, 0, 0, 0, 0]) 
とtest_idxに対応する値を置き換えたいindeces

array([ 3, 4, 5, 19, 28, 30, 38, 39, 47, 49, 50, 51, 54, 
     64, 74, 81, 84, 85, 90, 91, 93, 97, 102, 103, 106, 107, 
     109, 111, 115, 121], dtype=int64) 

の配列で有します

試してみると

y_pred[test_idx] = results 

私はエラーを取得する: TypeError例外:一つの要素を持つ唯一の整数配列は

+2

'y_pred'は配列ではなく、そのようにインデックスを付けることのできない' list'です。たぶん代わりに配列を使用しますか? –

+2

また、実際に 'numpy'タグを使うべきです。' numpy'配列について質問するつもりです。 –

+0

本当に 'y_pred''を' None'のリストにしますか?ゼロの配列ではありませんか? Matlabに相当するものは何ですか? – hpaulj

答えて

0

ショートバージョン:y_pred = [None] * 128y_pred = np.full(128, np.NaN)に置き換えます。あなたがそれをしたら、他のすべてがうまくいくでしょう。

ロングバージョン:他の人が言っているよう

問題は、y_predがリストではなく、配列であることです。リストは、一度に複数のインデックスを取得または設定することをサポートしていません。そのためには、numpy配列を使用する必要があります。

最も簡単なアプローチは、「センチネル」値と呼ばれる何もない配列を使用することです。この値は何も書き込まれていないことを示します。この値の最も明白な選択肢はおそらく0またはNaNですが、結果に何をしたいかによっては、まさに何でもよいでしょう。 NaNNoneのクローゼットになりますが、0は後で計算するほうが簡単です(たとえば、NaN != NaNの場合は、の値を後で識別するためにnp.isnanを使用する必要があります)。

y_pred = [None] * 128y_pred = np.zeros(128)に置き換えることができます。NaN(または他の値)を使用するには、y_pred = np.full(128, np.NaN)を使用できます(np.onesもありますが、ここで役立つとは思わない)。残りのコードはそのまま使用できます。

1

あなたy_predは、ネイティブのPythonのリストであり、あなたが整数以外のことで、インデックス、それをすることはできませんインデックスに変換することができます。これをnumpyの配列として作成する必要があります。あなたはそれを神託の方法を実行したい場合は

);

import numpy as np 
y_pred = np.array([None] * 128) 
+3

'None'を使用するかどうかを注意深く考慮する必要があります。これは' y_pred'に 'object'dtypeを強制し、パフォーマンスを犠牲にします。 –

+0

良い点ですが、ランタイムエラーについての質問 – pt12lol

+2

真ですが、特にOPが新しいPython/numpyの場合は、言及する価値があります。 –

1

私はあなたがここにMATLABをたくさんやっている参照してください。

はそれを以下の方法を初期化してみてください!ループする必要があります。 ように:

for index, value in zip(test_idx, results): 
    y_pred[index] = value 
+0

これは正しいリストアプローチです。 – hpaulj

0

このようにあなたはそれを行うことができます:私はあなたの両方のリストが同じ長さを持っていると仮定し

for key, val in zip(test_idx, results): 
    y_pred[key] = val 

for i in xrange(len(test_idx)): 
    y_pred[test_idx[i]] = results[i] 

か。

関連する問題