Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.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
Python:比较一维数组和二维数组,询问两个数组在哪里都有非零项_Python_Numpy - Fatal编程技术网

Python:比较一维数组和二维数组,询问两个数组在哪里都有非零项

Python:比较一维数组和二维数组,询问两个数组在哪里都有非零项,python,numpy,Python,Numpy,考虑两个数组,array1和array2,其中array1是1D,而array2是2D: array1 = [ 0 0 -80 -60 0 -30 ... ] array2 = [[-50 0 -20 0 -70 -80 ...], [ 0 0 0 -70 -40 0 ...], [ 0 -50 -30 -60 0 0 ...], ...

考虑两个数组,
array1
array2
,其中
array1
是1D,而
array2
是2D:

array1 =  [  0    0  -80 -60    0 -30 ... ] 

array2 = [[-50    0  -20   0  -70 -80 ...], 
          [  0    0    0 -70  -40   0 ...],
          [  0  -50  -30 -60    0   0 ...],
           ...                        ]
以下是我想要实现的目标:我想将
array1
array2
的每一行进行比较。每当
array1
array2
的相应行都有非零的条目时,我想增加一个计数器。最后,我想要一个数组,它的条目对应于每次比较的计数器值

以上面的数组为例:输出为:

[ 2, 1, 2 ] 
我希望这是清楚的

现在,这里是棘手的部分:我不想使用任何for循环。我只想用numpy方法来实现这一点

我开始做这个,但我有点迷路了。然而,以下是我的一些想法:

indices1 = array1.nonzero() 
indices2 = array2.nonzero()
equal_entries = np.where(np.equal(indices1, indices2))
假设
array1
array2
都是1D,这将返回一个numpy数组,其条目给出两个数组都具有非零元素的索引。这就是我想要的。几乎只是,我想要这个数组的长度。而且-由于
array2
是2D-我希望
array1
array2
的每一行之间的每次比较都有这个长度。可能是,
equal_entries=np。其中(np.equal(indices1,indices2))
工作正常,即使
array2
是2D。因此,此行可能返回一个2D numpy数组,其中每一行都给出元素,其中
array1
array2
的相应行都有非零元素。不过我不确定。但即使是这样,我也只能在不使用for循环的情况下查找结果每行中的元素数


有什么想法吗

您可以使用
数组!=0
获取数组,如数组1的
[False,False,True,True,False,True,…]

对两个数组都执行此操作,并使用
&
仅在两个数组均为零的情况下获取
True

然后取行和

np.sum((array1 != 0) & (array2 != 0), axis=1)
如果array1和array2使用行而不是array2的列进行比较是不直观的(例如,如果array2是二次的),则可以将array1显式地塑造为行向量:

np.sum((array1[np.newaxis, :] != 0) & (array2 != 0), axis=1)
一般说明:

  • 如果您想让numpy计数,请生成一个布尔数组,并使用
    np.sum()
    True
    项进行计数
  • 如果要按行或列执行缩减操作(如求和),请使用
    axis
    参数:为其指定要缩减的轴,因此如果要按行求和(轴0),则要沿所有列(轴1)缩减,请使用
    np.sum(…,轴=1)

嘿,回答得很好。。。因为我想要非零的条目,这是否意味着我只需要将
array1==0
更改为
array1!=0,或者此逻辑比较(无论出于何种原因)仅适用于
=
确定。我相应地改变了答案。