3 回答
TA贡献1862条经验 获得超7个赞
您可以将不需要的条目设置为小于数组中最小值的值,然后取行最大值:
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])
TA贡献1155条经验 获得超0个赞
您可以使用列表理解。
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]
TA贡献1805条经验 获得超9个赞
您可以在此答案中创建一个掩码:
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 indices
mask=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 :maximum
n = np.roll(n,1) #indices for slices
n[0] = 0 #starts at zero
np.maximum.reduceat(a[mask],n.cumsum())
array([5, 8, 2, 4], dtype=int32)
添加回答
举报
