一维和二维数组之间的元素明智比较
Element wise comparison between 1D and 2D array
想要在一维和二维数组之间执行逐元素比较。需要将 1D 数组的每个元素与 2D 的相应行进行比较(例如更大),然后将创建一个掩码。这是一个例子:
A = np.random.choice(np.arange(0, 10), (4,100)).astype(np.float)
B = np.array([5., 4., 8., 2. ])
我想做
A<B
这样,A 的第一行将与 B[0](即 5)进行比较,结果将是一个布尔数组。
如果我尝试这个,我会得到:
operands could not be broadcast together with shapes (4,100) (4,)
有什么想法吗?
您需要在数组中插入一个额外的维度 B
:
A < B[:, None]
这允许 NumPy 正确匹配两个形状进行广播; B
现在有形状 (4, 1) 并且维度可以配对:
(4, 100)
(4, 1)
规则是要么维度长度相同,要么其中一个长度需要为1;这里 100 可以与 1 配对,4 可以与 4 配对。在插入新维度之前,NumPy 尝试将 100 与 4 配对,这引发了错误。
想要在一维和二维数组之间执行逐元素比较。需要将 1D 数组的每个元素与 2D 的相应行进行比较(例如更大),然后将创建一个掩码。这是一个例子:
A = np.random.choice(np.arange(0, 10), (4,100)).astype(np.float)
B = np.array([5., 4., 8., 2. ])
我想做
A<B
这样,A 的第一行将与 B[0](即 5)进行比较,结果将是一个布尔数组。
如果我尝试这个,我会得到:
operands could not be broadcast together with shapes (4,100) (4,)
有什么想法吗?
您需要在数组中插入一个额外的维度 B
:
A < B[:, None]
这允许 NumPy 正确匹配两个形状进行广播; B
现在有形状 (4, 1) 并且维度可以配对:
(4, 100)
(4, 1)
规则是要么维度长度相同,要么其中一个长度需要为1;这里 100 可以与 1 配对,4 可以与 4 配对。在插入新维度之前,NumPy 尝试将 100 与 4 配对,这引发了错误。