Python/NumPy:返回两个列表中较小元素(LHS)+较大元素(RH)的列表

Python/NumPy:返回两个列表中较小元素(LHS)+较大元素(RH)的列表,python,python-2.7,numpy,Python,Python 2.7,Numpy,好了,我想做一件简单的事情,比较A和B,然后返回左侧列0上较小的元素和右侧列1上较大的元素 说 以及 我想得到:- C = [[ 310.,460.], [-4022.,4013.], [ -297.,145.], [ 3989.,4039.]] 我尝试了A[A>B],但元素的位置不符合顺序。有没有一个圆滑的方法来解决这个问题?感谢您的关注和帮助 使用A[A>B]可以得到A的所有元素的列表,这些元素大于B的相应元素。 改用 >>> idx1

好了,我想做一件简单的事情,比较A和B,然后返回左侧列0上较小的元素和右侧列1上较大的元素

以及

我想得到:-

C = [[  310.,460.],
     [-4022.,4013.],
     [  -297.,145.],
     [ 3989.,4039.]]
我尝试了A[A>B],但元素的位置不符合顺序。有没有一个圆滑的方法来解决这个问题?感谢您的关注和帮助

使用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.]])
使用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.]])

也许有一种更简单的方法可以做到这一点,但这很好:

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.]]

也许有一种更简单的方法可以做到这一点,但这很好:

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.]]

根据@plonser的回答,我实现的一行解决方案是:

C = np.array([np.where(A<B,A,B)[:,0],
              np.where(A>B,A,B)[:,1]]).T

谢谢大家的帮助

根据@plonser的回答,我实现的一行解决方案是:

C = np.array([np.where(A<B,A,B)[:,0],
              np.where(A>B,A,B)[:,1]]).T
谢谢大家的帮助