python:If循环返回错误的resu

2024-04-27 02:18:47 发布

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

我编写了以下脚本,试图计算数组a中的部分并将结果堆叠到原始数组:

import numpy


a = numpy.array([[1, 4, 4.555],
                 [2, 3, 9.112],
                 [3, 1, 7.322],
                 [1, 5, 3.911]])

i = 0
b = numpy.ones((4,1))
if i <= 2:
    b[i][0] = float(a[i][2])/(a[i][2]+a[i+1][2])
    b[i+1][0] = float(a[i+1][2])/(a[i][2]+a[i+1][2])
    i = i+2
print b
c = numpy.hstack((a,b))
print c

但结果很奇怪:

array b:
[[ 0.33328455]
 [ 0.66671545]
 [ 1.        ]
 [ 1.        ]]
array c:
[[ 1.          4.          4.555       0.33328455]
 [ 2.          3.          9.112       0.66671545]
 [ 3.          1.          7.322       1.        ]
 [ 1.          5.          3.911       1.        ]]

数组c的第一行和第二行是我想要的,但是其余的行是奇怪的。我期望的结果是:

[[ 1.          4.          4.555       0.33328455]
 [ 2.          3.          9.112       0.66671545]
 [ 3.          1.          7.322       0.65182943]
 [ 1.          5.          3.911       0.34817057]]

如何解决这个问题?有没有更有效的编码来完成这个任务?你知道吗


Tags: importnumpy脚本编码ifones数组float
1条回答
网友
1楼 · 发布于 2024-04-27 02:18:47

没有所谓的if循环。如果测试匹配,if语句将执行一个块,但只执行一次。块末尾的i = i+2语句不会导致代码重复。你知道吗

你可能想要一个while循环:

while i <= 2:
    b[i][0] = float(a[i][2]) / (a[i][2] + a[i+1][2])
    b[i+1][0] = float(a[i+1][2]) / (a[i][2] + a[i+1][2])
    i += 2

while只要测试为真,就重复执行块。你知道吗

您也可以使用for循环,使用以2步递增的xrange()对象:

for i in xrange(0, len(b), 2):
    b[i][0] = float(a[i][2]) / (a[i][2] + a[i+1][2])
    b[i+1][0] = float(a[i+1][2]) / (a[i][2] + a[i+1][2])

无论哪种方式,通过循环产生预期的输出:

[[ 1.          4.          4.555       0.33328455]
 [ 2.          3.          9.112       0.66671545]
 [ 3.          1.          7.322       0.65182943]
 [ 1.          5.          3.911       0.34817057]]

相关问题 更多 >