总而言之,我想做一些简单的事情,即比较A
和B
然后返回左侧列(第0列)中的较小元素和右侧较大的元素专栏(第1栏)。
说,
import numpy as np
A = np.array([[ 311.,360.],
[-4022.,-3973.],
[ 96.,145.],
[ 3989.,4038.]])
和
B = np.array([[310.,460.],
[ -4018.,4013.],
[ -297.,-256.],
[ 4005.,4039.]])
我想得到: -
C = [[ 310.,460.],
[-4022.,4013.],
[ -297.,145.],
[ 3989.,4039.]]
我尝试A[A>B]
,但元素的位置不合适。有没有一种简单的方法来解决这个问题?感谢您的关注和亲切的帮助!
答案 0 :(得分:4)
使用A[A>B]
,您会获得A
的所有元素的列表,这些元素大于B
的相应元素。
改为使用
>>> idx1 = A[:,0]<B[:,0]
>>> idx2 = A[:,1]>B[:,1]
>>> idx = np.column_stack((idx1,idx2))
>>> np.where(idx,A,B)
array([[ 310., 460.],
[-4022., 4013.],
[ -297., 145.],
[ 3989., 4039.]])
答案 1 :(得分:0)
也许有一种更简单的方法可以做到这一点,但这很好用:
import numpy as np
A = np.array([[ 311.,360.],
[-4022.,-3973.],
[ 96.,145.],
[ 3989.,4038.]])
B = np.array([[310.,460.],
[ -4018.,4013.],
[ -297.,-256.],
[ 4005.,4039.]])
#join the desired columns
firstcol = np.vstack((A[:,0], B[:,0]))
secondcol = np.vstack((A[:,1], B[:,1]))
#find the min and max values
mincol = np.amin(firstcol, axis=0)
maxcol = np.amax(secondcol, axis=0)
C = np.vstack((mincol, maxcol))
print C.T
[[ 310. 460.]
[-4022. 4013.]
[ -297. 145.]
[ 3989. 4039.]]
答案 2 :(得分:0)
从@ plonser的答案扩展而来,我实施的单行解决方案是:
C = np.array([np.where(A<B,A,B)[:,0],
np.where(A>B,A,B)[:,1]]).T
谢谢大家的帮忙!