如果python

时间:2015-08-16 05:26:22

标签: python matrix

如果任何条目是less than zeronan,除了矩阵中的第一行,我编写了一个python代码来复制先前的输入。但它没有工作,因为我需要我正在做的可能的错误是什么,有没有其他有效的方法来做到这一点,而不使用多个for循环。输入矩阵值在某些情况下可能不同,并且可能包含浮点值。

import numpy as np
from math import isnan
data = [[0, -1, 2],
        [7,8.1,-3],
        [-8,5, -1],
        ['N',7,-1]]
m, n = np.shape(data)

for i in range (1,m):
 for j in range (n):
  if data[i][j] < 0 or isnan:
   data[i][j] = data[i-1][j]

print data

预期输出

[[0,-1,2],
 [7,8.1,2],
 [7,5,2],
 [7,7,2]]

但是,我正在

[[0, -1, 2],
 [0, -1, 2],
 [0, -1, 2],
 [0, -1, 2]]

1 个答案:

答案 0 :(得分:2)

你说isnanTrue是一个函数,并且将始终生成if语句isnan(data[i][j])。您 想要not isinstance(data[i][j], (int, float))。但在这种情况下,看起来你要检查的是import numpy as np data = [ [0, -1, 2], [7, 8, -3], [-8, 5, -1], ['N', 7, -1] ] m, n = np.shape(data) for i in range(1, m): for j in range(n): if data[i][j] < 0 or not isinstance(data[i][j], (int, float)): data[i][j] = data[i-1][j] for row in data: print row

[0, -1, 2]
[7, 8, 2]
[7, 5, 2]
[7, 7, 2]

输出:

{{1}}