我已经使用#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])
但这会导致错误。任何指南将不胜感激。
答案 0 :(得分:2)
测试一下!
>>> sample_list = [1, 2, 3]
>>> sample_list[True]
2
>>> sample_list[False]
1
我相信您可以推断出True
等同于1
和False
等同于0
的事实。
其他测试:
>>> False == 0
True
>>> True == 1
True
我相信这会有所帮助。
答案 1 :(得分:1)
这里有几个问题,主要与语法有关:
__getitem__
与列表构造函数[]
的语法糖[]
表示混淆。list
来分隔,
中的元素。True
索引/ 1
视为False
。因此您可以尝试:
0
但这仅在mask = np.array([False, True, False, False])
res = X_train[mask][0]
只有4行的情况下有效。如果没有错误,并且行不同,您可能会遇到:
VisibleDeprecationWarning:布尔索引与索引数组不匹配 沿尺寸0
答案 2 :(得分:1)
提供的y_train
是list
,由于y_train == 0
不等于False
,list
的取值始终为0
。另外,由于False
等效于0
,因此您的代码行的计算结果为X_train[0][0]
,它会从X_train
返回第一个列表的第一项。
如@jpp所述,X_train[False True False False]
是无效的Python语法,因为对象后的方括号表示index
或slice
,而不是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}}
运行上述脚本后,输出如下:
现在,假设我们要检索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”值的所有行。
。
因此,通常将上述两个步骤合并如下,以节省一些脚本和时间:
df[list_true_false]
。
在问题中,第df[df['C']==4]
行不起作用,因为应该有索引'X'的列表,而不是裸的True / False值:
X_train[False True False False]
< / p>