来自以下数组:
test = np.array([[1,2,'a'],[4,5,6],[7,'a',9],[10,11,12]])
如何删除包含“a”的行? 预期结果:
array([[ 4, 5, 6],
[10, 11, 12]])
答案 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)]