我有一个名字是Ave的名单。 Ave [0]如下所示:
[array([ nan]),
array([ 0.03030303]),
array([ 0.025]),
array([ 0.03546099]),
array([ 0.02877698]),
array([ 0.05343511]),
array([ nan]),
array([ nan])]
我需要从Ave中的每个列表中删除nan值。 我的代码工作缓慢:
for j in range(len(Ave)):
c=0
while c<8:
for i in range(len(Ave[j])):
if np.isnan(Ave[j][i])==True:
del Ave[j][i]
break
c=c+1
如果有人给我更快的代码,我们将不胜感激。
答案 0 :(得分:1)
如果我理解你的问题,这是一种方式。
请注意,保存数组列表效率低下。建议尽可能将数据保存在一个numpy
数组中。
from numpy import array, isnan, nan
Ave = [array([ nan]),
array([ 0.03030303]),
array([ 0.025]),
array([ 0.03546099]),
array([ 0.02877698]),
array([ 0.05343511]),
array([ nan]),
array([ nan])]
A = array(Ave)
res = list(map(array, A[~isnan(A)]))
# [array(0.03030303),
# array(0.025),
# array(0.03546099),
# array(0.02877698),
# array(0.05343511)]
答案 1 :(得分:0)
您可以使用列表推导:
ave = [ [ n for n in row if not np.isnan(n)] for row in ave ]
请注意,您的样本数据有点含糊不清,因为不清楚“Ave [0]如下所示”是否意味着该列表有三个维度或只有两个维度。它不太可能你想要一个包含第二维的3D列表包含单元素数组的列表。 NaN清理的结果将产生具有0或1个元素的数组列表的行。
如果这确实是你正在使用的,那么在解决方案中需要再添加一个列表解析,此时我建议将其分解为具有中间结果的步骤。
例如:
clearNaN = lambda numberArray : [ n for n in numberArray if not np.isnan(n) ]
clearList = lambda arrayList : [ clearNaN(arr) for arr in arrayList ]
Ave = [ clearList(row) for row in Ave ]
答案 2 :(得分:0)
您还可以使用itertools.filterfalse
:
Ave
# [array([nan]), array([0.03030303]), array([0.025]), array([0.03546099]), array([0.02877698]), array([0.05343511]), array([nan]), array([nan])]
list(itertools.filterfalse(np.isnan, Ave))
# [array([0.03030303]), array([0.025]), array([0.03546099]), array([0.02877698]), array([0.05343511])]
或者如果Ave
嵌套得更深:
AveAveAve = np.random.randint(0, 3, (5, 5, 1))
AveAveAve = np.random.random((5, 5, 1)) * AveAveAve / AveAveAve
AveAveAve = list(map(list, AveAveAve))
AveAveAve
# [[array([0.25051587]), array([nan]), array([0.93294353]), array([0.45979654]), array([0.46274847])],
# [array([nan]), array([0.36631801]), array([0.18432189]), array([0.10408241]), array([nan])],
# [array([0.73367427]), array([0.93523268]), array([0.33142847]), array([nan]), array([0.84569255])],
# [array([0.95316363]), array([0.67298091]), array([0.06368582]), array([0.22668049]), array([0.14361035])],
# [array([0.66480064]), array([0.91260134]), array([0.10735208]), array([0.55708037]), array([0.6402967])]]
list(map(list, map(itertools.filterfalse, itertools.repeat(np.isnan), AveAveAve)))
# [[array([0.25051587]), array([0.93294353]), array([0.45979654]), array([0.46274847])],
# [array([0.36631801]), array([0.18432189]), array([0.10408241])],
# [array([0.73367427]), array([0.93523268]), array([0.33142847]), array([0.84569255])],
# [array([0.95316363]), array([0.67298091]), array([0.06368582]), array([0.22668049]), array([0.14361035])],
# [array([0.66480064]), array([0.91260134]), array([0.10735208]), array([0.55708037]), array([0.6402967])]]