这种python索引如何工作:'print(X_train [y_train == 0] [0])'在python中工作?

时间:2018-10-02 18:00:28

标签: python

我已经使用#sample = 60,000和#features = 784训练数据X_train。并带有len(y_train)= 60,000的相应标签y_train。

我不明白下面的代码如何工作:

print(X_train[y_train == 0][0])

基本上我没有得到索引。
我尝试了以下内容来理解它(考虑y_train == 0会导致什么。):

print(X_train[False True False False][0])

但这会导致错误。任何指南将不胜感激。

这是输出:enter image description here

5 个答案:

答案 0 :(得分:2)

测试一下!

>>> sample_list = [1, 2, 3]
>>> sample_list[True]
2
>>> sample_list[False]
1

我相信您可以推断出True等同于1False等同于0的事实。

其他测试:

>>> False == 0
True
>>> True == 1
True

我相信这会有所帮助。

答案 1 :(得分:1)

这里有几个问题,主要与语法有关:

  1. 您将__getitem__与列表构造函数[]的语法糖[]表示混淆。
  2. 您需要用list来分隔,中的元素。
  3. 您应该通过NumPy数组而不是列表进行索引,以避免将True索引/ 1视为False

因此您可以尝试

0

但这仅在mask = np.array([False, True, False, False]) res = X_train[mask][0] 只有4行的情况下有效。如果没有错误,并且行不同,您可能会遇到:

  

VisibleDeprecationWarning:布尔索引与索引数组不匹配   沿尺寸0

答案 2 :(得分:1)

提供的y_trainlist,由于y_train == 0不等于Falselist的取值始终为0。另外,由于False等效于0,因此您的代码行的计算结果为X_train[0][0],它会从X_train返回第一个列表的第一项。

如@jpp所述,X_train[False True False False]是无效的Python语法,因为对象后的方括号表示indexslice,而不是list(甚至那么您仍然缺少逗号。

但是,如果您想说遍y_train中的60,000个项目并在X_train处获得相应的y_train == 0项,那么您想做这样的事情:

for y in y_train:
    if y == 0:    
        print(X_train[y][0])

答案 3 :(得分:1)

我希望看到一个完整,最小且可验证的示例。

基于我现在所看到的,X_train是一个二维数组(或列表),因此您需要提供两个单独的索引。列表中的每个条目都包含另一个列表,您可以将其作为打印输出。

y_train == 0将根据y_train变量的值求值为True或False。确保可以将True隐式转换为1,将False隐式转换为0。因此,您的其他索引(y_train == 0)可以是0或1

答案 4 :(得分:0)

尽管我已经接受了一个答案,但是我也想在这里写下我所要的是什么:
让我们以一个DataFrame(熊猫的数据结构)为例:
{ {1}}
运行上述脚本后,输出如下:
 enter image description here 现在,假设我们要检索C == 4的所有行的所有信息。为了简单起见,我在这里写一个两步脚本:
1。 import pandas df = pd.DataFrame(data={'A':[1,2,3,2,1,9],'B':[3,2,1,4,5,6],'C':[4,5,5,4,6,4]})
输出: list_true_false = df['C']==4
list_true_false 是值为True / False的列表长度,该长度等于length(C)。以及何时执行以下操作:
2。list_true_false = [True, False, False, True, False, True]
将返回 list_true_false 的索引保留“ True”值的所有行。
enter image description here
因此,通常将上述两个步骤合并如下,以节省一些脚本和时间:
df[list_true_false]
在问题中,第df[df['C']==4]行不起作用,因为应该有索引'X'的列表,而不是裸的True / False值:
X_train[False True False False] < / p>