positions = ['GK', 'M', 'A', 'D', ...]
heights = [191, 184, 185, 180, ...]
列表中的每个元素对应于一个玩家。第一个列表"位置"包含代表每个玩家位置的字符串。可能的位置是:'GK'
(守门员(,'M'
(中场(,'A'
(进攻(和'D'
(防守(。第二个列表heights
包含表示玩家身高的整数(以厘米为单位(。
1( 首先我将位置和高度转换为 numpy 数组:
np_heights = np.array(heights)
np_positions = np.array(positions)
然后我找出守门员的高度:gk_heights
gk_heights = np_heights[np_positions =='GK']
此代码工作正常,并执行它应该执行的操作。
现在问题来了。
不是np_heights
和np_positions
两个单独的列表。 这条线是怎么回事:
gk_heights = np_heights[np_positions =='GK']
知道np_positions中的某个索引与np_heights
中的某个索引相关联吗?
这是Data Camp在线课程的最后一个问题: 网址: https://campus.datacamp.com/courses/intro-to-python-for-data-science/chapter-4-numpy?ex=16
任何帮助将不胜感激。
这个问题的答案与表达式np_positions=='GK'
的含义有关。您应该尝试仅运行此行以查看输出是什么。本质上,此行的输出是一个与np_positions
形状相同的布尔数组,布尔数组的元素在满足条件的情况下True
,在条件不满足的情况下False
。因此,您应该像np_positions=='GK' = array([True,False,False,False...])
一样返回一个数组。然后当你使用这个数组作为索引片进入np_heights
时,表达式np_heights[np_positions=='GK']
告诉你"挑选出np_heights的值,其中内部数组np_positions=='GK'
True
。因此,它将挑选出np_heights
的第一个元素。希望这个解释是有道理的。
从这个解释中应该学到的是,你的两个数组最好是相同的顺序。这两个数组不会相互通信哪个玩家被放入哪个索引。np_heights[np_positions=='GK']
用人的话说:"守门员在np_positions
在哪里?哦,它在索引 0 中(或其他?( - 返回索引 0 值np_height
.
因此,如果守门员是一个数组的第一个元素,那么最好是第二个数组的第一个元素(依此类推(,以便此表达式正确运行。