【发布时间】:2013-12-30 21:49:55
【问题描述】:
我有一个超过 1,000 行和列的方阵。在“边界”的许多字段中都有nan,例如:
grid = [[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, 1, nan, nan],
[nan, 2, 3, 2, nan],
[ 1, 2, 2, 1, nan]]
现在我想删除我只有nan 的所有行和列。这将是 1. 和 2. 行和最后一列。但我也想收到一个方阵,所以淘汰的行数必须等于淘汰的列数。在这个例子中,我想得到这个:
grid = [[nan, nan, nan, nan],
[nan, nan, 1, nan],
[nan, 2, 3, 2],
[ 1, 2, 2, 1]]
我确定我可以通过循环解决这个问题:检查每一列和每一行,如果里面只有 nan,最后我使用 numpy.delete 删除我找到的行和列(但只有最小的数字,因为得到一个正方形)。
但我希望任何人都可以帮助我提供更好的解决方案或一个好的库。
【问题讨论】:
-
np.isnan()会给你一个布尔矩阵,你可以使用一些np.all()和np.any()来更进一步 -
尝试
g = np.isnan(grid)然后grid[:, ~np.all(g, axis=0)][~np.all(g, axis=1)]。不过不确定你的方形情况。似乎在某些情况下这可能是模棱两可的。 -
如果你想保持一个正方形,你有时还会有行完全被nan填满?
标签: python numpy matrix crop nan