基于多个逻辑条件删除数字矩阵的行

时间:2019-08-28 03:50:24

标签: python numpy

我有以下数据集:

enter image description here

我要删除第一象限和第三象限中的数据。

有什么建议吗?

这是我正在使用的代码:

def circGuass(N,Mean,VAR):
dimension = len(Mean)
a = np.array(Mean)
p = np.random.randn(dimension,N)
h = np.tile(a, (2, N//2))
x = math.sqrt(Var) * p + h
return x

import sys
import math
import numpy as np
import matplotlib.pyplot as plt
M1 = 0
Var = 1
N = 500
Mean = [M1, M1]
X = circGuass(N, Mean, Var)
rowonex= X[0]
rowtwox = X[1]
plt.scatter(rowonex,rowtwox , color='blue', marker='+')
plt.show()

我尝试使用以下代码擦除数据,但未成功。

X = X[np.logical_not(np.logical_and(data[:,0] > value, X[:,0] < value))]

1 个答案:

答案 0 :(得分:1)

部分问题是散点图会将每个点成对绘制。这意味着如果要删除点,则必须从X [0]中删除一个值以及在X [1]的相应索引处的值。

这也许是您可以使用熊猫的东西。幸运的是,pandas建立在numpy的基础上,并且非常高兴地处理numpy数组。

由于第一和第三象限中的点相乘得到负数,而第二和第四象限中的点相乘得出正数,我们可以将两列相乘以确定要保留的点。然后,我们只截取否定答案。

所以您可以尝试这样的解决方案:

import pandas as pd

df = pd.DataFrame(X).T  # transposed for easier plotting
df = df[(df[0] * df[1]) <= 0]  # slice df to get 2nd and 4th quadrant values
df.plot.scatter(0,1, marker='+', c='b')  # plot