【问题标题】:What is x[ : , 0]?什么是 x[ : , 0]?
【发布时间】:2022-01-26 10:08:33
【问题描述】:

我不明白它的作用,只看到它被 sklearn-object 使用。 在尝试这样的测试时

x = [(1, 2), (2, 3), (3, 4)]
y = [[1, 2], [2, 3], [3, 4]]

print(y[:, 0])

我收到了这个错误(x 和 y):

TypeError: list indices must be integers or slices, not tuple

我的假设是逗号前的 : 告诉 Python 获取所有条目,而 0 指定哪个“子集”。

如何正确使用这个表达式,它有什么作用?

【问题讨论】:

标签: python numpy


【解决方案1】:

正如here 解释的那样,这是索引数组的特定于numpy 的符号,而不是普通的python。这就是为什么它不适用于您的代码的原因。在您的(初始)情况下,sklearn 对象可能包装了一个支持 numpy 切片语法的 numpy 数组。

在您的具体情况下,它的工作方式如下:

import numpy as np

y = np.array([[1, 2], [2, 3], [3, 4]])
print(y[:, 0])

# prints: [1 2 3]

这将产生沿第一个轴的所有索引(即使用完整的列向量),但在第二个轴上仅使用索引 0(即仅使用第一个列向量)。

【讨论】:

  • 刚刚尝试了同样的事情,现在它可以正常工作了,感谢您的链接!
【解决方案2】:

您所表达的内容将适用于更复杂的对象,例如 numpy(及其著名的 slicing)。在普通 Python 的情况下,这是不可能的。要访问特定号码(在您的情况下),您必须执行 x[2][1](在您的示例中为 4)。

为了达到你想要的(取每个元组的第一项),你会做 [item[0] for item in y]。这是列表理解:遍历y,在每个项目的第一个索引处获取对象,然后从中创建一个列表。

【讨论】:

  • 我很困惑,因为原生 Python 也支持一些切片,例如y[ : 2] 产生 [[1, 2],[2, 3]]。 m00ams 的回复澄清了这一点。不过感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 2014-11-06
  • 2014-02-11
  • 2020-09-24
  • 2011-05-04
  • 2018-06-05
  • 2022-08-22
相关资源
最近更新 更多