【发布时间】:2016-09-01 16:58:38
【问题描述】:
在 2d ndarray 中将一列与其他列进行比较的正确 numpy 语法是什么?
在阅读了somedocs 上的数组广播后,我仍然不太确定这样做的正确方法是什么。
示例:假设我有一个二维数组,每个玩家(行)在每场比赛(列)中得分。
# 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)
我尝试了什么:我知道我可以使用np.newaxis 手动将(5,) 拉伸为(5,2)。所以这行得通:
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 方式来写这个?
【问题讨论】:
-
这不是 hacky。
np.newaxis正是为了这样的目的而提供的。
标签: python arrays numpy array-broadcasting