python - 根据多个逻辑条件删除数值矩阵的行
问题描述
我有以下数据集:
我想删除第一象限和第三象限的数据。
有什么建议吗?
这是我正在使用的代码:
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))]
解决方案
部分问题是散点图会将每个点绘制成一对。这意味着如果要擦除一个点,则必须从 X[0] 中删除一个值以及 X[1] 的相应索引处的值。
这是您可以使用 pandas 的东西。幸运的是,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
推荐阅读
- python - 根据值和 NaN 合并 pandas 行
- java - 组件无法使用 GridBagLayout 正确显示
- javascript - jQuery post 到 ASP.NET Core 控制器的问题
- php - 如何进行自己的模式验证
- node.js - 如何在objectionjs中的同一张表上定义多对多关系?
- php - 这部分代码冻结了我的电脑
- php - 使用 ajax 重新加载特定元素
- regex - 限制用户同时输入 2 个空格 Flutter Dart
- c++ - 关于这个 API 的 C++ 实现
- html - 有没有办法修复 jupyter notebook css 以允许分页符?