-
牧羊人nacy
您可以将不需要的条目设置为小于数组中最小值的值,然后取行最大值:starts = np.array([2, 1, 2, 3])mask = np.arange(a.shape[1]) < starts[:, None]a[mask] = np.min(a) - 1# array([[0, 0, 5, 3],# [0, 4, 8, 2],# [0, 0, 1, 2],# [0, 0, 0, 4]])np.amax(a, axis=1)# array([5, 8, 2, 4])
-
白衣非少年
您可以使用列表理解。 import numpy as np a = np.array([[3,1,5,3],[1,4,8,2],[4,2,1,2],[9,2,4,4]]) inds = [-2,-3,-2,-1] # the indices in your example result = [max(line[i:]) for line,i in zip(a,inds)] print(result) #output [5, 8, 2, 4]
-
Cats萌萌
您可以在此答案中创建一个掩码:a = np.array([[3,1,5,3],[1,4,8,2],[4,2,1,2],[9,2,4,4]])n = np.array([2,3,2,1])idx = a.shape[1]-n #starting indicesmask=np.arange(a.shape[1]) >= idx[:,None]# array([[False, False, True, True],# [False, True, True, True],# [False, False, True, True],# [False, False, False, True]])然后使用过掩码数组应用reduceat :maximumn = np.roll(n,1) #indices for slicesn[0] = 0 #starts at zeronp.maximum.reduceat(a[mask],n.cumsum())array([5, 8, 2, 4], dtype=int32)