根据多个位置删除 numpy 数组中的项目

removing item in numpy array based on multiple positions

我有一个 numpy 数组列表,想根据特定位置删除元素。

[array([ 1, 2, nan, 4, nan]), 
array([ 5, 6, 7, 8, 9]),
array([ 5, 6, 7, 8, 9])]

我需要获取所有 np.nan 的位置并删除相应的列,给我:

[array([ 1, 2, 4]), 
array([ 5, 6, 8]),
array([ 5, 6, 8])]

没有循环一切,我不知道从哪里开始!

我想最简单的是

# arr is your original list
arr = [np.array([ 1, 2, np.nan, 4, np.nan]),
       np.array([ 5, 6, 7, 8, 9]),
       np.array([ 5, 6, 7, 8, 9])]
return_array = np.asarray(arr)[:, ~np.isnan(np.asarray(arr)).any(axis=0)]
print(return_array)

这将 return:

array([[1., 2., 4.],
       [5., 6., 8.],
       [5., 6., 8.]])

如果你想要 arraylist,那么你必须另外做:

return_array = [r for r in return_array]

鉴于您的数组列表名为 A:

A = [np.delete(row,np.argwhere(np.isnan(A[0]))) for row in A]

输出:

[array([1., 2., 4.]), array([5, 6, 8]), array([5, 6, 8])]

根据您的应用程序,使用 sams-studio 创建一个大 numpy 数组的方法可能会更好。对于大多数应用程序,我更喜欢这种方法。