Python中NumPy数组candidates[0]与candidates[0:1]的区别是什么?
搞懂NumPy中
candidates[0]和candidates[0:1]的区别 嘿,刚接触NumPy的时候确实容易把这俩搞混,我结合你给出的数组来给你讲明白核心差异:
首先先明确你的数组candidates是一个3行34列的二维数组(用candidates.shape会得到(3, 34)),接下来看两者的不同:
1. candidates[0]:整数索引,返回一维数组
这是用单个整数索引直接取第0行,返回的是一个一维数组,它的shape是(34,)——也就是只有一个维度,长度是34。
比如你打印它的话,输出会是:
array([1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0])
没有外层的额外括号,就是一串元素组成的一维结构。这种形式适合单独处理这一行的元素,比如遍历、做元素级别的计算。
2. candidates[0:1]:切片操作,返回二维数组
这是用切片语法取行范围,0:1表示“从索引0开始,到索引1结束(不包含1)”,所以实际上只取了第0行,但返回的仍然是一个二维数组,shape是(1, 34)——有两个维度,第一维度长度是1(代表1行),第二维度是34。
打印它的话,输出会是:
array([[1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0]])
注意外层多了一层括号,结构上还是“行+列”的二维形式。这种形式适合需要保持二维结构的场景,比如要和其他二维数组做拼接、或者输入到要求二维输入的机器学习模型中。
一句话总结
candidates[0]:取第0行,返回一维数组(降维了)candidates[0:1]:取第0行,返回二维数组(保持原数组的维度结构)
内容的提问来源于stack exchange,提问作者RezAm
相关产品推荐
相关产品推荐

