Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy 矢量化布尔比较:将一列与整个矩阵进行比较_Numpy_Scipy - Fatal编程技术网

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版本不同。代码对我来说是有效的,无需将数组转换为密集数组。