python - NumPy:如何过滤矩阵行

标签 python numpy

我是 numpy 的新手,在尝试过滤样本子集时遇到问题。

我有一个形状为 (1000, 12) 的矩阵。也就是说,一千个样本,每个样本有 12 个数据列。我愿意创建两个矩阵,一个包含样本中的所有异常值,另一个包含所有非异常值的元素;生成的矩阵应具有以下形状:

norm.shape     = (883, 12)
outliers.shape = (117, 12)

为了识别异常值,我使用了以下条件:

cond_out  = (dados[0:,RD_EVAL] > _max_rd) | (dados[0:,DUT_EVAL] > _max_dut)

也就是说,对于矩阵中的每一行,我都在寻找两列的值。如果其中之一高于某个阈值,则该线被视为异常值。关键是,此条件的形状为 (1000,),因此当我压缩原始矩阵时,我得到了 (117,) 结果。我如何过滤矩阵,使结果为 (117,12),即一个矩阵,其中所有行都是离群值,但每行中包含所有数据列?

最佳答案

import numpy as np

d=np.random.randn(4,4)

array([[ 1.16968447, -0.07650322, -0.30519481, -2.09278839],
       [ 0.53350868, -0.8004209 ,  0.38477468,  1.31876924],
       [ 0.06461366,  0.82204993,  0.42034665,  0.30473843],
       [ 1.13469745, -1.47969242,  2.36338208, -0.33700972]])

让我们过滤掉第二列中所有小于零的行:

d[:,1]<0
array([ True,  True, False,  True], dtype=bool)

你看,你得到了一个逻辑数组,你可以用它来选择所需的行:

d[d[:,1]<0,:]

array([[ 1.16968447, -0.07650322, -0.30519481, -2.09278839],
       [ 0.53350868, -0.8004209 ,  0.38477468,  1.31876924],
       [ 1.13469745, -1.47969242,  2.36338208, -0.33700972]])

关于python - NumPy:如何过滤矩阵行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11953111/

相关文章:

python - 如何计算 csv 文件中的行数并忽略未使用的行(使用 python)

python - 输入 FITS 表到 astroquery.xmatch

python - fillna 与 None 串联

来自 psycopg2 PostgreSQL 查询的 Python 数组操作

Python,numpy 排序数组

python - 已知结构矩阵的 NumPy 矩阵乘法效率

python - 为 axes3d 创建表面数据

python - 使用 pyc 编译 IronPython - 没有名为 numpy 的模块

python - 带和不带笔记本的 IPython 差异

python - 是什么导致我的 Python 程序使用 opencv 耗尽内存?