如果任何条目是less than zero
或nan
,除了矩阵中的第一行,我编写了一个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]]
答案 0 :(得分:2)
你说isnan
。 True
是一个函数,并且将始终生成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}}