Numpy 矢量化布尔比较:将一列与整个矩阵进行比较
我有一个简单的矩阵Numpy 矢量化布尔比较:将一列与整个矩阵进行比较,numpy,scipy,Numpy,Scipy,我有一个简单的矩阵 a = sps.csc_matrix( (z , (x,y)), shape = (N,N), dtype = int) 我还有一个1D数组z,我想与a中的每一列进行比较,并计算匹配项 count = 0 for i in range(N): count += (z == a[:,j]).sum() 这需要很长时间,因为代码没有矢量化。有没有办法将这种比较矢量化 a == z 不起作用。但是我想要一个类似于numpy中两个数组的a*z如何快速执行逐列乘法的方法,
a = sps.csc_matrix( (z , (x,y)), shape = (N,N), dtype = int)
我还有一个1D数组z
,我想与a
中的每一列进行比较,并计算匹配项
count = 0
for i in range(N):
count += (z == a[:,j]).sum()
这需要很长时间,因为代码没有矢量化。有没有办法将这种比较矢量化
a == z
不起作用。但是我想要一个类似于numpy中两个数组的
a*z
如何快速执行逐列乘法的方法,而不是显式循环a
的列并乘以z
。这能满足您的需要吗
(a == z[:, None]).sum()
您能否提供一个简单的示例代码来完全初始化
a
和z
矩阵(即定义z
,x
,y
,N
)。@farenorth x,y和z只是N维numpy数组。我认为您的循环没有达到您想要的效果。看看(z==a[:,i])。shape
。是NxN(a==z[:,None])
返回一个布尔值。它甚至不是一个向量。“无”是做什么的?我想我可以先把z的列复制到另一个矩阵中,然后再做一个矩阵比较……对我来说不是这样(a==z[:,None])
给出一个逻辑numpy数组。听起来你可能在代码的某个地方重新定义了a
。z[:,None]
是z
的“列向量”视图。如果我首先将稀疏矩阵转换为[密集]数组,但如果我将a
作为稀疏矩阵,则不会。我怀疑这可能与a)如何构造a
有关,或者b)这与我们的numpy或scipy版本不同。代码对我来说是有效的,无需将数组转换为密集数组。