如果我有一个NumPy数组,例如:
我希望您能拆分包含-1的子数组和不包含-1的部分。 请注意,我正在处理非常大的数据集,因此每个操作可能非常耗时,所以我尝试在内存和CPU时间方面找到最有效的方法。
目前我正在做的是:
有没有不创建
A = np.array([[3, 2], [2, -1], [2, 3], [5, 6], [7,-1] , [8, 9]])
我希望您能拆分包含-1的子数组和不包含-1的部分。 请注意,我正在处理非常大的数据集,因此每个操作可能非常耗时,所以我尝试在内存和CPU时间方面找到最有效的方法。
目前我正在做的是:
slicing1 = np.where(A[:, 1] == -1)
with_ones = A[slicing1]
slicing2 = np.setdiff1d(np.arange(A.shape[0]), slicing1, assume_unique=True)
without_ones = A[slicing2]
有没有不创建
slicing2
列表的方法来减少内存消耗,因为它可能非常大?
有更好的解决方法吗?
setdiff1d
好得多,原因有很多。而且由于布尔数组每个项只使用一个字节,即使是两个布尔索引数组的副本,也比整数索引数组及其补集要小。为了节省更多的内存,我相信这样不会复制:numpy.logical_not(ix, out=ix)
。 - senderle