簡體   English   中英

如何在 python 中用 for 循環填充二維數組的每個元素

[英]How to fill each element of a 2d array with a for loop in python

發生的事情是循環正在迭代並填充數組的元素,但是'元素明智' - 即它正確計算第一個元素,然后再次循環並再次用應該是第二個元素的元素填充第一個元素......所以最終,我有一個二維數組/矩陣,其中填充了應該只在矩陣的最后一個元素中的值。 如何使第一個元素被填充后,for循環繼續移動到下一個元素和下一個值?

這是我試過的:

sim_matrix=np.zeros((3,3), dtype=float)

for i in range(0,3):
    for j in range(0,3):
        for k in range(0,3):
            for l in range(0,3):
                    sim_matrix[i][j]=node_list_bsc[0][k]['bsc mean value']-node_list_bsc[1][l]['bsc mean value']

#node_list_bsc[x][y]['bsc mean value'] are float values - they are stored in a list of dictionaries,
#hence the double indexing

這給出了:

array([[1.14488261e-08, 1.14488261e-08, 1.14488261e-08],
       [1.14488261e-08, 1.14488261e-08, 1.14488261e-08],
       [1.14488261e-08, 1.14488261e-08, 1.14488261e-08]])

但它應該給出:

[[-5.131371757023141e-10, -7.509188731093747e-08, 7.67647989217221e-07],
 [8.933230795306053e-08, 1.475355781782538e-08, 8.574934343459839e-07],
 [-7.567123003427902e-07, -8.312910504780254e-07, 1.144882605013307e-08]]

如您所見,它僅填充了最后一個元素。 我從這些嵌套 for 循環的中心運行打印命令,以查看它是如何填充的,如下所示:(示例)

[[-5.13137176e-10  0.00000000e+00  0.00000000e+00]
 [ 0.00000000e+00  0.00000000e+00  0.00000000e+00]
 [ 0.00000000e+00  0.00000000e+00  0.00000000e+00]]

[[-7.50918873e-08  0.00000000e+00  0.00000000e+00]
 [ 0.00000000e+00  0.00000000e+00  0.00000000e+00]
 [ 0.00000000e+00  0.00000000e+00  0.00000000e+00]]...

即第一個元素是正確的,但隨后被第二個元素替換。 從代碼中這可能已經很明顯了,但我認為它仍然有助於說明。 我也嘗試過使用 while 循環和 if - else 語句 - 類似:

#pseudo code following:
for i in range(0,3):
    for j in range(0,3):
        for k in range(0,3):
            for l in range(0,3):
            if sim_matrix[i][j]==0.0:
                    sim_matrix[i][j]=node_list_bsc[0][k]['bsc mean value']-node_list_bsc[1][l]['bsc mean value']
            else: continue

感覺很接近——但我就是不知道我哪里出錯了!

據我了解您的問題,您在二維數組的每個位置都得到相同的數字。 起初,如果不了解“node_list_bsc”,就很難提出任何建議。 但是,要將值分配給 2D 數組,您只需要兩個循環。 您的代碼可以寫成 sim_matrix=np.zeros((3,3), dtype=float)

for i in range(0,3):
    for j in range(0,3):
        if sim_matrix[i][j]==0.0:
            sim_matrix[i][j]=node_list_bsc[0][i]['bsc mean value']- node_list_bsc[1][j]['bsc mean value']

如果它不起作用,請告訴我並提供有關 node_list_bsc 的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM