逐行比较两个具有不同长度的numpy数组
Comparing two numpy arrays with different lengths line-wise
我正在尝试比较两个不同长度数组的所有元素。假设我有一个数组:
A = np.array([[15,25,22],[200,200,20]])
第二个数组是我要比较的数组:
B = np.array([[150., 350.],
[250., 450.],
[150., 350.],
[400., 600.],
[400., 600.],
[650., 850.],
[550., 750.],
[650., 850.]])
我需要的是将 A (A[:, 0]
) 中所有数组的索引 0 上的所有元素与数组 B (B[:, 0]
) 中所有数组中索引 0 上的所有元素进行比较。
如果A只是一个简单的数组如A=[25,40,25]
,那么就简单的做成:
smaller = np.array(A[0] > B[:, 0]).astype('int')
我想我可以将它转换为二维比较,这样
smaller = np.array(A[:, 0] > B[:, 0]).astype('int')
这不起作用,错误很明显,ValueError: operands could not be broadcast together with shapes (2,) (8,)
。我明白这种方式我无法比较它,但我无法找到如何比较的方法。
我想要的输出如下所示:
[[False, False, False, False, False, False, False, False],
[True, False, True, False, False, False, False, False]]
这就是我能拥有的
np.array([A[i,0] > B[:, 0] for i in range(A.shape[0])])
感谢@MichaelSzczesny,我得到了我正在寻找的解决方案。只需将 [:, None]
添加到比较中即可:
smaller = np.array(A[:, 0][:, None] > B[:, 0]).astype('int')
如 中所述,它向数组添加了一个轴。于是从
[ 15 200]
我们得到
[[ 15]
[200]]
我正在尝试比较两个不同长度数组的所有元素。假设我有一个数组:
A = np.array([[15,25,22],[200,200,20]])
第二个数组是我要比较的数组:
B = np.array([[150., 350.],
[250., 450.],
[150., 350.],
[400., 600.],
[400., 600.],
[650., 850.],
[550., 750.],
[650., 850.]])
我需要的是将 A (A[:, 0]
) 中所有数组的索引 0 上的所有元素与数组 B (B[:, 0]
) 中所有数组中索引 0 上的所有元素进行比较。
如果A只是一个简单的数组如A=[25,40,25]
,那么就简单的做成:
smaller = np.array(A[0] > B[:, 0]).astype('int')
我想我可以将它转换为二维比较,这样
smaller = np.array(A[:, 0] > B[:, 0]).astype('int')
这不起作用,错误很明显,ValueError: operands could not be broadcast together with shapes (2,) (8,)
。我明白这种方式我无法比较它,但我无法找到如何比较的方法。
我想要的输出如下所示:
[[False, False, False, False, False, False, False, False],
[True, False, True, False, False, False, False, False]]
这就是我能拥有的
np.array([A[i,0] > B[:, 0] for i in range(A.shape[0])])
感谢@MichaelSzczesny,我得到了我正在寻找的解决方案。只需将 [:, None]
添加到比较中即可:
smaller = np.array(A[:, 0][:, None] > B[:, 0]).astype('int')
如
[ 15 200]
我们得到
[[ 15]
[200]]