【问题标题】:How to fill each element of a 2d array with a for loop in python如何在python中用for循环填充二维数组的每个元素
【发布时间】:2020-04-09 15:02:01
【问题描述】:

发生的事情是循环正在迭代并填充数组的元素,但是'元素明智' - 即它正确计算第一个元素,然后再次循环并再次用应该是第二个元素的内容填充第一个元素。 ...所以最终,我有一个二维数组/矩阵,其中填充了应该只在矩阵的最后一个元素中的值。如何做到这样一旦第一个元素被填充,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

感觉很接近 - 但我就是不知道我哪里出错了!

【问题讨论】:

  • 请检查你最里面的for循环的缩进。
  • 不清楚为什么要运行两个内部循环。 ij 在这些循环期间不会更改,因此您一遍又一遍地设置相同的元素 (sim_matrix[i][j])。
  • 你的矩阵够大吗?我看到您已将其设置为 3 x 3,但由于有 4 个循环,它不应该是 4 x 3 吗?

标签: python arrays for-loop


【解决方案1】:

据我了解您的问题,您在二维数组的每个位置都得到相同的数字。起初,如果不了解“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 的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    相关资源
    最近更新 更多