このコードを大規模なデータセットで使用すると便利です。ここでは、コードがある、私は徹底的に後でそれを説明します:反復の値をnumpy配列に格納する - Python、Numpy
import numpy as np
np.set_printoptions(threshold='nan')
tri_nums = [3, 2, 1]
paths = [1, 3, 4, 5]
vol_list = [10, 10, 10, 15, 15, 25]
n = 0
array_list = []
while n <= len(tri_nums):
for num in tri_nums:
print "assigning volume", vol_list[sum(tri_nums)-len(vol_list)+1]
volume_array = np.zeros(shape = (6, 6))
volume_array[paths[num-1],paths[num]] = vol_list[sum(tri_nums)-len(vol_list)+1]
array_list.append(volume_array)
print paths[num-1], paths[num]
tri_nums.pop(0)
paths.pop(0)
n+=1
print paths
print tri_nums
final_array = sum(array_list)
print array_list
print final_array
tri_nums
を皮切り:tri_nums
の 値は常にpaths
の長さの三角数のリストになります。したがって、paths
のリストは、[1, 3, 4, 5, 6, 8]
のtri_nums
を[5, 4, 3, 2, 1]
とします。
tri_nums
も、vol_list
の値の数と相関しています。ご覧のとおり、vol_list
には10
の3つがあります。 10
の数は、tri_nums
の最初の値に等しいです。 2つ目の値がtri_nums
の場合は、2つの15
と2
があります。このパターンは決して変化しません!これの別の例は、(元の場合)リストpaths
は、4「ノード」からなる各隣接ノードとの間1,3,4および5ノードさ
paths = [1, 3, 4, 5, 6, 8]
tri_nums = [5, 4, 3, 2, 1]
vol_list = [15, 15, 15, 15, 15, 250, 250, 250, 250, 25, 25, 25, 10, 10, 15]
経路、すなわち、あります経路1-3、3-4、4-5。
このように、volume_array
は6x6配列であり、ゼロで構成されています。 volume_array
の行の値は、各パスの最初の値、すなわち1
,3
,4
に対応します。列の値は、各パスの第2の番号、すなわち3
,4
,5
に対応する。
ここでトリッキーなビットが来ます! vol_list
の値がvolume_array
に追加さtri_nums
の各値について
- 次のよう
vol_list
で値は、前述の配列項目に割り当てられています。この配列内の行の値は、パスの最初の値、つまり
[4]
によって定義され、列の値はパスの2番目の値によって定義されます([4]
の場合は[5]
を意味します)。 - の場合、値
10
が、volume_array[4][5]
に1回、volume_array[3][4]
に1回、volume_array[1][3]
に1回、3回追加されます。 tri_nums[1]
の場合、値15
が2回、volume_array[4][5]
に1回、volume_array[3][4]
に1回加算されます。tri_nums[2]
については、25
の値がvolume_array[4][5]
に1回加算されます。- 最後に、前の3つのステップで生成された配列のすべての値が加算され、
final_array
が得られます。
言及する価値のある別のことは、tri_nums
の合計がlen(vol_list)
に等しいということです。さらにtri_nums[n]
は常に>tri_nums[n+1]
です。
path
のtri_num
のコードとvol_list
のコードを実装するのが理想です。何百ものアイテムがあります。私が今使っている方法は、手で何百ものループを作る必要があることを意味します。 while
ループを同時に動作させるにはどうすれば "何百回ものループ"シナリオを回避できますか?
すべてがうまく動作しているが、最終的な出力は、(25
)であるvol_list
の最終値がarray_list[4][5]
に割り当てられていないので、final_array
ではなかったしたことを意味
[[ 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 10. 0. 0.]
[ 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 25. 0.]
[ 0. 0. 0. 0. 0. 25.]
[ 0. 0. 0. 0. 0. 0.]]
。もう1つのループを実行するだけで済みますが、最後のループを実行する方法はわかりません。
不明な点がある場合は教えてください。
おかげ
'list'はデータ型です。変数名として使用しないでください(名前を変更してください)。 'count <1:'は削除しても同じ結果になるので冗長です。それは、後で複数回反復したい場合にのみ、それを残すことが理にかなっています。 – jDo
何か手で行うことができますが、コンピュータを持つことができます。あなたはそれを手で行うために必要なステップについて考えてみてください。それから、コンピュータにそれをさせてください。コンピュータをそれにするのは難しい場合もありますが、YMMVです。 –
あなたが尋ねたので、コードサンプルは少し長いですし、説明もやや複雑です。私はあなたが記述の部分をコードの対応する部分に散在させるならば、より明確な質問をすると思います。カップルの場所にサンプル出力を追加するとさらに助けになります。それが言われている、私はあなたの何をやっているのかを知っている。私が答えを出すことができるかどうか見てみましょう。 –