我需要类似三元运算符的东西,但是要在矩阵的一行上。
我有ai / bi / ci,ad,bd,cd元素,并且需要计算aj / bj / cj:
ai bi ci | ad bd cd | aj bj cj
--------------+---------------+--------------
1.1 1.2 1.3 | 0.1 0.6 0.3 | 1.1 2.4 1.3
^^^ ^^^
1.5 1.6 1.7 | 0.6 0.7 0.8 | 1.5 1.6 3.1
^^^ ^^^
逻辑是这样的:
aj = ai if ad < max(ad, bd, cd) else bi + ci
如果ai
中*i
最大,则aj = bi + ci
。 bj
和cj
同样适用,它们被其他两个元素之和取代。
我可以用pandas编写一个三元运算符,但是希望有一种方法可以用numpy表示。
答案 0 :(得分:2)
A = np.array([[1.1, 1.2, 1.3, 0.1, 0.6, 0.3],
[1.5, 1.6, 1.7, 0.6, 0.7, 0.8]])
n = A.shape[1] // 2
res = np.where(A[:, n:] < A[:, n:].max(1)[:, None],
A[:, :n],
A[:, :n].sum(1)[:, None] - A[:, :n])
print(res)
array([[1.1, 2.4, 1.3],
[1.5, 1.6, 3.1]])