讓二維陣列如下:
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 個大小為 2 的一維 NumPy 陣列(它們是lp和rp)。例如lp = [1, 3],rp = [2, 4]和引數是二維 NumPy 陣列
uj5u.com熱心網友回復:
應該有一個更微妙的方法,但在這里我想出了:
np.array([x for x in a if list(x) != [1,2]])
輸出
[[3, 4], [5, 6], [7, 8]]
請注意,我不建議在大型陣列中使用串列推導,因為它會非常耗時。
uj5u.com熱心網友回復:
你的方法是正確的,但面具需要是一維的:
a[(a != [1, 2]).all(-1)]
輸出:
array([[3, 4],
[5, 6],
[7, 8]])
或者,您可以收集元素并使用 -1 推斷維度:
a[a != [1, 2]].reshape(-1, 2)
uj5u.com熱心網友回復:
布爾條件創建一個 True/False 的 2D 陣列。您必須and跨列應用操作以確保匹配不是部分匹配。考慮上面陣列中的一行 [5,2],您撰寫的腳本將在生成的一維陣列中添加 5 并忽略 2。可以按如下方式完成:
a[np.all(a != [1, 2],axis=1)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/433824.html
