给定一个数组 A、错误的行索引和错误的列索引,是否可以使用切片来创建一个没有这些行或列的新数组?
这可以通过 np.delete 完成,如下所示:
import numpy as np
A=np.random.rand(20,16)
bad_col=np.arange(0,A.shape[1],4)[1:]
bad_row=np.arange(0,A.shape[0],4)[1:]
Anew=np.delete(np.delete(A,bad_row,0),bad_col,1)
print('old shape ',A.shape)
print('new shape ',Anew.shape)
我还知道您可以使用切片从数组中选择某些列和行。但我想知道它是否可以用于排除某些列和行?如果不是,除了
np.delete
之外,最好的方法是什么。
谢谢你
如果不移动所有项目(这对于大型数组来说很慢)或创建新项目,则无法删除数组中的项目。没有其他解决办法。
在 Numba 或 Cython 中,您可以通过一次操作而不是 2 次操作直接创建一个新数组,因此对于大型数组来说,速度应该快两倍左右。
Numpy 视图要么是连续的,要么是跨步的。无法沿给定轴使用可变步幅。这是为了性能而这样定义的。因此,如果您只想选择 ID 为偶数的列和行,也可以。但是,您无法选择所有行/列(例如不能被 4 整除的 ID)(因为没有可以使用恒定步幅构建的视图)。