如何根据numpy数组中的条件删除行?

时间:2017-12-14 17:36:06

标签: python arrays numpy multidimensional-array numpy-ndarray

来自以下数组:

test = np.array([[1,2,'a'],[4,5,6],[7,'a',9],[10,11,12]])

如何删除包含“a”的行? 预期结果:

array([[ 4,  5,  6],
   [10, 11, 12]])

3 个答案:

答案 0 :(得分:5)

注意,struct JsonWebsocket: Decodable { let exchange: String let avgp: String let mcap: String let ppc7D: String let ppc12h: String let ppc4h: String let ppc24h: String init(json: [String]) { self.exchange = json[0] self.avgp = json[1] self.mcap = json[2] self.ppc7D = json[3] self.ppc12h = json[4] self.ppc4h = json[5] self.ppc24h = json[6] } } do { let jsonData = try JSONSerialization.jsonObject(with: json, options: []) as? [String: Any] var jsonWebsocket: [JsonWebsocket] = [] if let data = jsonData!["data"] as? [[String]] { for d in data { jsonWebsocket.append(JsonWebsocket(json: d)) } } print(jsonWebsocket.count) } catch let error{ print(error.localizedDescription) } 支持矢量化比较:

numpy

现在,您想要,其中所有不等于>>> test array([[1, 2, 'a'], [4, 5, 6], [7, 'a', 9], [10, 11, 12]], dtype=object) >>> test == 'a' array([[False, False, True], [False, False, False], [False, True, False], [False, False, False]], dtype=bool)

'a'

因此,只需选择带掩码的行:

>>> (test != 'a').all(axis=1)
array([False,  True, False,  True], dtype=bool)

答案 1 :(得分:2)

另外,这样吗? (灵感来自我的一个another answers

In [100]: mask = ~(test == 'a')

In [101]: mask
Out[101]: 
array([[ True,  True, False],
       [ True,  True,  True],
       [ True, False,  True],
       [ True,  True,  True]], dtype=bool)

In [102]: test[np.all(mask, axis=1), :]
Out[102]: 
array([['4', '5', '6'],
       ['10', '11', '12']],
      dtype='<U21')

但请注意,我们 我们只是切出没有字母a的行。

答案 2 :(得分:1)

总而言之,有几种可能的方法,例如:

test[np.all(test != 'a', axis=1), :]

test[(test != 'a').all(axis=1)]