【问题标题】:Find an easier way to compare two 2-d array's independence找到一种更简单的方法来比较两个二维数组的独立性
【发布时间】:2016-04-14 05:08:50
【问题描述】:

我的问题

1。简介

  • ka & kb 是两个二维数组,都是 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:这两个二维数组的重叠频率。

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

3。我的问题

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

更多解释

我想在 ka = 1 但 (kb & kc & ...) != 1 at grid[i,j] 时对数组 ka 的数量求和(我称之为 independence 为如标题所示)。
如果 ka 只和 kb 比较,我可以使用 rep 来实现,我还没有想到处理超过 2 个数组的方法

【问题讨论】:

  • 您的图片未显示。你能用这些更新你的问题吗?它们可以帮助我们更好地理解问题。
  • 感谢您的谨慎,我重新上传了

标签: python arrays numpy matplotlib


【解决方案1】:

为什么不使用数组 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) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2022-12-21
    • 2016-04-12
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多