使用“循环”更改二维列表值的操作不正确

2024-06-01 03:51:00 发布

您现在位置:Python中文网/ 问答频道 /正文

brief = B[:8, :8]

average = 0
for i in range(8):
    average += sum(brief[i])
average -= brief[0][0]
average /= 64

print(average, 'is average\n\n')


for i in range(0, 8):
    for j in range(0, 8):
        if brief[i][j] >= average:
            brief[i][j] = 0
            print(brief[i][j])
        if brief[i][j] < average:
            brief[i][j] = 1
            print(brief[i][j])

for b in range(8):
    for bb in range(8):
        print(brief[b][bb])

简短是具有以下值的B矩阵的8x8部分:

[[-79.59774442081138,    158.7202095869316,    112.56820969421881,    -59.04458113044859,    110.79507835753822,    65.46782110183209,    -1.3342162705874172,    25.437988304756363],
[322.5377343539482,     8659.5625,             456.1372383004441,     1039.2670348171582,    502.43880254201326,    201.0009891626345,    209.16093093311468,     -208.50047755598916],
[-112.56820969421881,   224.46427302053877,   -159.19548884162273,   -83.50164741931893,    156.6879024574203,     92.58548050122643,    -1.8868667450035765,    35.974748060074624],
[37.72684830839333,     624.7408144869114,    53.3538205433223,      -449.0466120624775,    32.59027278985499,     -43.22267150470408,   -85.65936443956468,     219.2142421380014],
[-28.001674523528344,   249.9757286483847,    -39.60034788033096,    31.11673361617372,     130.48068801733655,    -160.1201473099224,   -112.78964698763158,    -158.7758135283589],
[54.7357856623738,      -359.607876182155,    77.40809043087583,     46.68603856944288,     -89.88043774029418,    282.9769031346061,    27.867634849967388,     -202.2926232693297],
[15.271034089670682,    70.44041778968491,    21.596503521074148,    7.9278092841192915,    -37.515872842738105,   27.38507374399468,    -10.177891707673886,    -118.39173788971809],
[20.304659220046318,    -234.8242040396121,   28.71512444835341,     146.63941111295003,    -59.20821857294881,    -73.98127851564756,   121.3747483435147,      17.835871018082692]]

然后我找到平均值,并将short的每个元素更改为0(如果大于(或等于)平均值),如果小于平均值,则更改为1。在将简短元素与平均值进行比较的循环中,我还打印了新值。所以输出是1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0 etc...。如您所见,有0和1。但是当我在循环之后打印short时,我得到的所有元素都是1s。输出有什么问题

p.S.B被创建为np。零然后用数字填充


Tags: in元素forifisrange矩阵平均值
1条回答
网友
1楼 · 发布于 2024-06-01 03:51:00

用以下行替换双if语句:

for i in range(0, 8):
    for j in range(0, 8):
        if brief[i][j] >= average:
            brief[i][j] = 0
        else:
            brief[i][j] = 1

问题是,在您的代码中,您首先分配brief[i][j] = 0,然后再次签入第二个if语句if brief[i][j] < average:,这意味着if 0 < average,对于average的值,这始终是真的,因此所有内容都变为1

相关问题 更多 >