使用 python 将列替换为另一个数组

Replace column with another array using python

我有一个 (5x5) 元素的数组和第二个 (5x1) 的 B 数组。现在我想用B替换A的列。我的数组是

A=array([[1, 2, -3, 4, 5],[1, 2, -3, -4, 5],[-1, 2, -3, -4, 5],[-1, -2, -3, -4, 5],[-1, -2, -3, -4, -5]])
and 
B=array([-10. , -11.5, -13. , -14.5, -16. ])

所以它应该在遇到第一个负数时用B替换每一列。比如A的第一列,第一个负数元素在A[2][0](-1)处,所以A的第一列替换为B[2],第二列第一个负数元素为在 A[3][1] 并且该列替换为 B[3],等等。所以我的最终输出是

A=(alpha[2],alpha[3],alpha[0],alpha[1],alpha[4])= (-13.0, -14.5, -10.0, -11.5, -16.0)  

到目前为止我的代码是

A=array([[1, 2, -3, 4, 5],[1, 2, -3, -4, 5],[-1, 2, -3, -4, 5],[-1, -2, -3, -4, 5],[-1, -2, -3, -4, -5]])
B=np.linspace(-10,-16,5)
for i in range(len(B)):
  A[:,i][A[:,i]<0]=alpha[i]

但这并没有给出正确答案。

提前致谢!

您可以使用 argmax 找到每列中有负值的第一行,然后使用该结果作为 B:

的索引
import numpy as np

A = np.array([[1, 2, -3, 4, 5],[1, 2, -3, -4, 5],[-1, 2, -3, -4, 5],[-1, -2, -3, -4, 5],[-1, -2, -3, -4, -5]])
B = np.linspace(-10, -16, 5)

A2 = B[np.argmax(A < 0, axis=0)]

输出:

array([-13. , -14.5, -10. , -11.5, -16. ])