尝试选择两列时出现 np.where 错误

Posted

技术标签:

【中文标题】尝试选择两列时出现 np.where 错误【英文标题】:np.where error when trying to select two columns 【发布时间】:2020-09-22 11:18:13 【问题描述】:

我正在尝试对来自 sklearn 的“Linnerud”数据集执行多重回归。 我有一个 20x3 的 np 数组,但我只想选择三列中的两列。 我可以使用以下方法添加单个自变量:

X_for_1D_LR = X[:,np.where(np.array([feature_names_X])[0] == 'Situps')[0]]

但是在尝试添加另一个自变量时遇到问题。

X_for_2D_LR = X[:,np.where(np.array([feature_names_X])[0] == 'Situps', np.array([feature_names_X])[0] == 'Chins')[0]]

并收到错误“ValueError:应该给出或不给出 x 和 y” 任何帮助将不胜感激!

【问题讨论】:

你给where 两个参数。它有两种模式,一种是np.nonzero 的别名,它只接受一个参数。另一个 where 需要 3 个参数。你有没有花时间(重新)阅读np.where 文档?这应该是尝试调试此类错误时的第一站。 【参考方案1】:

重构您的代码以使逻辑更明显。 Python 是一种大量使用空格的语言。充分利用这一点:

X_for_2D_LR = X[:,
                np.where(
                    np.array([feature_names_X])[0] == 'Situps',
                    np.array([feature_names_X])[0] == 'Chins'
                )[0]]

现在,如果您阅读错误消息ValueError: either both or neither of x and y should be givennp.where 的documentation,也许现在您可以看到您的错误。

您的条件(例如np.array([feature_names_X])[0] == 'Situps')在一个列表中,应该用布尔运算符分隔,而不是逗号:

X_for_2D_LR = X[:,
                np.where(
                    np.array([feature_names_X])[0] == 'Situps' or
                    np.array([feature_names_X])[0] == 'Chins'
                )[0]]

【讨论】:

以上是关于尝试选择两列时出现 np.where 错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试合并两个不同数据框的两列时出现问题?

尝试关闭键盘时出现“无法识别的选择器”错误

UIImagePickerController 抛出错误:185:创建聚合音频设备时出错:尝试选择视频时出现“啥”

尝试选择选取器元素时出现 iOS UITest 错误

尝试合并来自两个不同表的两个选择时出现错误

尝试在 phpMyAdmin 上将 db.sql 导入我的数据库时出现错误消息?