在 2d ndarray 中将一列与其他列进行比较的正确 numpy 语法是什么?
在阅读了一些关于数组广播的 文档后,我仍然不太确定这样做的正确方法是什么。
示例: 假设我有一个二维数组,每个玩家(行)在每场比赛(列)中得分。
# goals = number of goals scored by ith player in jth game (NaN if player did not play)
# column = game
goals = np.array([ [np.nan, 0, 1], # row = player
[ 1, 2, 0],
[ 0, 0, np.nan],
[np.nan, 1, 1],
[ 0, 0, 1] ])
我想知道,在最后一场比赛中,球员是否通过得分比之前任何一场比赛都多的进球创造了个人记录,忽略了她没有出现的比赛(表示为nan
)。我只希望True
数组中的第一个和最后一个玩家。
只写goals[:,2] > goals[:,:2]
返回ValueError: operands could not be broadcast together with shapes (5,) (5,2)
我尝试了什么:我知道我可以手动将其拉伸(5,)
成. 所以这有效:(5,2)
np.newaxis
with np.errstate(invalid='ignore'):
personalBest= ( np.isnan(goals[:,:2]) |
(goals[:,2][:,np.newaxis] > goals[:,:2] )
).all(axis=1)
print(personalBest) # returns desired solution
有没有一种不那么老套、更惯用的 numpy 方式来写这个?