【发布时间】:2021-10-30 05:15:51
【问题描述】:
我有一个矩阵列表M_list,如果它包含nan,我想有效地从列表中删除任何矩阵
我的方法是查看每个矩阵,对其条目求和,如果结果和为 nan,则从列表中删除矩阵:
import numpy as np
# generate list of seven, 5-by-5 matrices each of which
contains two nans:
M_list=[]
for t in range(7):
M=np.random.rand(5,5)
M.ravel()[np.random.choice(M.size, 2, replace=False)] =
np.nan
M_list.append(M)
# Now my attempt
for t in range(len(M_list)):
array_sum = np.sum(M_list[t])
if np.isnan(array_sum):
M_list.remove(M_list[t])
我收到的错误消息指出,具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()。删除循环中的最后一行会删除错误,但我不明白为什么,因为我只是尝试执行基本的列表操作。
还有没有更简单的方法可以在不使用循环的情况下实现我的目标?
【问题讨论】:
-
您还没有给我们一个样本
M_list来使用。我想我们应该自己生成?如果您发布一个运行脚本,那么我们可以根据该运行脚本得出答案。 -
对于一个包含 7 个 5×5 矩阵的列表,每个矩阵包含两个 nan,这样可以:
for t in range(7): M=np.random.rand(5,5) M.ravel()[np.random.choice(M.size, 2, replace=False)] = np.nan M_list.append(M) -
这里有很多方法可以检查单个数组中的 nan stackoverflow.com/questions/6736590/fast-check-for-nan-in-numpy
-
感谢您的代码。将其添加到问题中(连同
import numpy as np),以便快速复制/粘贴给我们一个运行脚本。