找到一种更简单的方法来比较两个二维阵列的独立性

时间:2016-01-09 15:26:52

标签: python arrays numpy matplotlib

我的问题

1。简介

  • ka& kb是两个2-d阵列,全部为31 * 37
  • 它们包含2个值:0& 1
  • 独立性:仅当ka [i,j] = 1
  • 的值时的网格数量

使用np.mask,它们显示如下:

http://i4.tietuku.com/29adccd90484fe34.png
代码在这里:

ka_select = np.ma.masked_less(ka,0.001)
pa =plt.pcolor(kb_select,cmap="Set1",alpha =0.7,facecolor = "k",edgecolor = 'k',zorder =1)
kb_select = np.ma.masked_less(kb,0.001)
pb =plt.pcolor(kb_select,cmap="Set1",alpha =0.7,facecolor = "k",edgecolor = 'k',zorder =1)         

2。我早期的工作

  • 与两个阵列ka& KB。
  • 如果index [i,j]中的值都等于1,则表示此两个数组在此网格中重叠。
  • 计算重叠频率。

我写了一些关于比较两个二维数组的代码

### repeat I defined is the estimate matrix to represent overlap or not in [i,j] position
repeat = np.zeros(ka.shape[0]*ka.shape[0]).reshape(ka.shape[0],ka.shape[1])

for i in range(0,ka.shape[0],1):
    for j in range(0,ka.shape[1],1):
        if (ka[i,j] == 1) & (kb[i,j] == 1) :
           repeat [i,j]=1
         else:
            repeat[u,v]  = 0
rep.append(repeat.sum())
  • rep:这两个2-d阵列的重叠频率。

http://i4.tietuku.com/7121ee003ce9d034.png

3。我的问题

当有两个以上的2-d numpy数组都具有值(0,1)的相同形状时,如何对重叠频率求和?
我可以按顺序比较多个数组,但重复网格将被重新计算

更多解释

我想在ka = 1但是(kb& kc& ...)!= 1在网格[i,j](我称之为独立性如标题所示。) 如果ka只与kb比较,我可以使用 rep 来实现这一点,而且我还没有想过处理超过2个数组的方法

1 个答案:

答案 0 :(得分:3)

为什么不使用数组的总和kb,...并测试结果元素? 一个有三个网格的例子:

import numpy

# some random arrays
ka = numpy.random.random_integers(0,1,37*31).reshape(31,37)
kb = numpy.random.random_integers(0,1,37*31).reshape(31,37)
kc = numpy.random.random_integers(0,1,37*31).reshape(31,37)
combined_rest = kb + kc

print "independance:", numpy.sum( (ka == 1) & (combined_rest < 2) )