【发布时间】:2014-02-28 14:17:25
【问题描述】:
我有以下两个数组:
a = np.mat('5;5;1;4;3;2;1;5;3')
b = np.zeros((9,9))
数组a 是一个簇分配,其中每个对象(由一行表示)被分配给一个给定的簇(由一个数字表示)。我有多个这样的集群分配,并想在数组b 中计算每对对象在同一集群中同时出现的频率。在 Matlab 中,我会写如下内容:
b(a==5,a==5) = b(a==5,a==5) + 1
输出将是:
b =
1 1 0 0 0 0 0 1 0
1 1 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0
例如,b(2,8) == 1(使用从 1 开始的 Matlab 索引)因为两个元素 2 和 8 都在簇 5 中。
NumPy 中的索引系统完全不同,我想知道如何在那里做同样的事情?
更新:
zhangxaochen's solution 使用 b[m&m.T]+=1 给出正确的结果。我也想出了以下方法:
c = np.nonzero(a == 5)[0]
b[c.T,c] +=1
是否有充分的理由使用其中一种?我使用具有数万行/列的大型数组。
【问题讨论】:
-
你能给出一个示例输出吗?
标签: python arrays matlab numpy multidimensional-array