Python/NumPy:返回两个列表中较小元素(LHS)+较大元素(RH)的列表
好了,我想做一件简单的事情,比较A和B,然后返回左侧列0上较小的元素和右侧列1上较大的元素 说 以及 我想得到:-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
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
谢谢大家的帮助