让二维数组如下所示:
In [1]: a = [[1, 2], [3, 4], [5, 6], [1, 2], [7, 8]]
a = np.array(a)
a, type(a)
Out [1]: (array([[1, 2],
[3, 4],
[5, 6],
[1, 2],
[7, 8]]),
numpy.ndarray)我曾尝试过这样做:
In [2]: a = a[a != [1, 2])
a = np.reshape(a, (int(a.size/2), 2) # I have to do this since on the first line in In [2] change the dimension to 1 [3, 4, 5, 6, 7, 8] (the initial array is 2-dimensional array)
a
Out[2]: array([[3, 4],
[5, 6],
[7, 8]])我的问题是,在NumPy中有任何函数可以直接做到这一点吗?
更新问题
下面是我一直在研究的半完整源代码:
from sklearn import datasets
data = datasets.load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['Target'] = pd.DataFrame(data.target)
bucket = df[df['Target'] == 0]
bucket = bucket.iloc[:,[0,1]].values
lp, rp = leftestRightest(bucket)
bucket = np.array([x for x in bucket if list(x) != lp])
bucket = np.array([x for x in bucket if list(x) != rp])备注:
leftestRightest(arg)是一个函数,它返回大小为2的二维NumPy数组(即lp和rp)。对于实例,lp = [1, 3]、rp = [2, 4]和参数是二维NumPy数组。
发布于 2022-02-27 16:20:30
应该有一种更微妙的方法,但在这里,我想出的是:
np.array([x for x in a if list(x) != [1,2]])输出
[[3, 4], [5, 6], [7, 8]]请注意,我不建议使用大型数组中的列表理解,因为这将非常耗时。
发布于 2022-02-27 16:27:08
你的方法是正确的,但是面具必须是一维的:
a[(a != [1, 2]).all(-1)]输出:
array([[3, 4],
[5, 6],
[7, 8]])或者,您可以收集元素并使用-1推断维度:
a[a != [1, 2]].reshape(-1, 2)发布于 2022-02-27 16:30:40
布尔条件创建一个True/False的2D数组。您必须在列中应用and操作,以确保匹配不是部分匹配。考虑上面数组中的第5行2,您编写的脚本将添加5,而忽略得到的1D数组中的2。可以这样做:
a[np.all(a != [1, 2],axis=1)]
https://stackoverflow.com/questions/71286342
复制相似问题