2016-12-05 7 views
0

私は、配列の配列を持っていますparameters[i][j]としてparameters配列の配列の要素に、要素によって、要素をリストに挿入し

すなわちprint parameters[1][2]0.99

を与え、各番号にアクセスすることが可能です

Iはまた、配列を有する:

長さも 100ある
temperatures = [110.51, 1618.079, ...] 

print len(temperatures) 

100  

temperaturesの要素はkとする:

Iは各k番目の要素を挿入したいですtemperaturesparametersの各要素にそれぞれ、final:私はzipループのようなものを作ることを試みた

final = [np.array([ 2.1e-04, -8.3e-03, 9.8e-01, 110.51]), np.array([ 5.5e-04, 1.2e-01, 9.9e-01, 1618.079]), ...] 

for i,j in zip(parameters, valid_temperatures): final = parameters[2][i].append(valid_temperatures[j])

が、これは動作しません。あなたが私を助けることができたら、私は感謝します。

EDIT:@hpaulj回答に基づいて:

あなたはソリューション1を実行する場合:

parameters = [np.array([ 2.1e-04, -8.3e-03, 9.8e-01]), np.array([ 5.5e-04, 1.2e-01, 9.9e-01])] 
temperatures = [110.51, 1618.079] 

    for i,(arr,t) in enumerate(zip(parameters,temperatures)): 
    parameters[i] = np.append(arr,t) 

print parameters 

それが与える:

[array([ 2.10000000e-04, -8.30000000e-03, 9.80000000e-01, 
    1.10510000e+02]), array([ 5.50000000e-04, 1.20000000e-01, 9.90000000e-01, 
    1.61807900e+03])] 

所望の出力です。また

溶液2

parameters = [np.array([ 2.1e-04, -8.3e-03, 9.8e-01]), np.array([ 5.5e-04, 1.2e-01, 9.9e-01])] 
temperatures = [110.51, 1618.079] 

parameters = [np.append(arr,t) for arr, t in zip(parameters,temperatures)] 

print parameters 

はまた、所望の出力を与えます。

溶液1ソリューションとは対照的に2i番目enumerateインデックスを使用しません。したがって、私はちょうど解決策2さん[np.append ... for arr ]構文を次のように分割した場合:

parameters = [np.array([ 2.1e-04, -8.3e-03, 9.8e-01]), np.array([ 5.5e-04, 1.2e-01, 9.9e-01])] 
temperatures = [110.51, 1618.079] 

for arr, t in zip(parameters,temperatures): 
    parameters = np.append(arr,t) 

print parameters 

の出力は、 『配列形式』でのみ最後の繰り返しが含まれ、そしてません:

[ 5.50000000e-04 1.20000000e-01 9.90000000e-01 1.61807900e+03] 

すべての反復を印刷することで、これをどのように機能させることが可能でしょうか? おかげ

+0

あなたは配列の*リスト* ...そして温度の*リスト*を持っています。 –

+0

おそらく 'parameters [i] = parameters [i] .append(temperatures [i])'です。これは 'parameters'の' i番目の要素 'に '温度'の 'i'番目の要素を追加するべきです –

+0

@ArturRychlewiczいいえ、それはできません。' list!= np.array' –

答えて

3

あなたはアレイのリストに加え、他のリストや配列があります。ちょうど(リストの内包が、そのために正常に動作します)反復処理、およびconcatenate(配列APPEND)を実行し、それらを組み合わせること

In [656]: parameters = [np.array([1,2,3]) for _ in range(5)] 
In [657]: temps=np.arange(5) 

を各ペアについて。

In [659]: [np.concatenate((arr,[t])) for arr, t in zip(parameters, temps)] 
Out[659]: 
[array([1, 2, 3, 0]), 
array([1, 2, 3, 1]), 
array([1, 2, 3, 2]), 
array([1, 2, 3, 3]), 
array([1, 2, 3, 4])] 

私たち[]の2組を保存しappend使用、それ以外の場合は同じです。

[np.append(arr,t) for arr, t in zip(parameters,temps)] 

クリーン 'なインプレース' バージョン:

for i,(arr,t) in enumerate(zip(parameters,temps)): 
    parameters[i] = np.append(arr,t) 

==== ============

サブアレイの長さがすべて同じ場合は、次元配列に、および連結temps

In [663]: np.hstack((np.vstack(parameters),temps[:,None])) 
Out[663]: 
array([[1, 2, 3, 0], 
     [1, 2, 3, 1], 
     [1, 2, 3, 2], 
     [1, 2, 3, 3], 
     [1, 2, 3, 4]]) 
+0

とにかく新しい配列を作成しています。これは 'numpy'データ構造の貧弱な使用であることを指摘するのに役立ちます。 –

+0

時間の非効率性は実際にはリストの理解によるものではなく、おそらく単純なPythonの 'list'がどこに行くのかという点で、' np.array'が使われているという事実が原因です。 –

+1

リストから始める場合は、リスト操作を行うほうが速いことがよくあります。配列の作成にはかなりのオーバーヘッドがあります。私たちは、現実的なデータのタイミングを実行して、どちらが速いかを判断する必要があります。 – hpaulj

関連する問題