python:为什么这段代码不起作用?

时间:2017-05-24 07:46:06

标签: python

stMa [] []是一个ndarray(一个7823 * 12矩阵),它的值'类型是numpy.float64。 我原来的代码是:

pagespeed RewriteLevel CoreFilters;

但输出是:

x=[]
for i in range(0,7823):
    if stMa[i][6] == 100:
        x.append(i)
print(x)

这很奇怪,因为我确信在第七列中必须有一些值为100的项目。 当我修改此代码以检查stMa [i] [6]:

[]
[Finished in 9.0s]

现在,部分输出是:

x=[]
for i in range(0,7823):
    if stMa[i][6] == 100:
        x.append(i)
    print(stMa[i][6]) 
print(x)

因此在stMa [i] [6]中肯定有一些值为100的项目。然后,为什么列表" x"空?

新问题: 为什么Python可以找到有价值的项目" 0"当我使用

时,在stMa [i] [6]中
51.3672727273
100.0
100.0
77.8559585492
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
22.9720207254
[]
[Finished in 9.5s]

2 个答案:

答案 0 :(得分:0)

正如其他人所指出的那样,问题很可能是因为你试图检查两个浮点数是否完全相等 - 这是一个危险的游戏。

请尝试使用numpy isclose方法:

x=[]
for i in range(0,7823):
    if np.isclose(stMa[i][6], 100):
        x.append(i)
print(x)

或者,使用numpy的where函数在没有循环的情况下执行此操作:

x = np.where(np.isclose(stMa[:][6], 100))

答案 1 :(得分:0)

确保你的stMa [i] [6]不是str 或者你可以将代码改为`

x=[] for i in range(0,7823): if float(stMa[i][6]) == 100.0: x.append(i) print(x)