gpt4 book ai didi

python - 相邻矩阵中的度中心性和聚类系数

转载 作者:行者123 更新时间:2023-12-02 16:04:20 27 4
gpt4 key购买 nike

基于从此链接中提取的数据集:Brain and Cosmic Web samples ,我正在尝试进行一些复杂网络分析。


论文The Quantitative Comparison Between the Neuronal Network and the Cosmic Web , 声称已经使用了这个数据集,以及它的相邻矩阵

"Mij,即行/列等于检测到的节点数的矩阵,如果节点被分隔,则值 Mij = 1一个距离 ≤ llink ,或者 Mij = 0 否则”。

然后我探查矩阵,像这样:

from astropy.io import fits

with fits.open('mind_dataset/matrix_CEREBELLUM_large.fits') as data:
matrix_cerebellum = pd.DataFrame(data[0].data)

它不打印稀疏矩阵,而是打印与节点的距离以像素表示的矩阵。


我了解到1个像素和尺度的对应关系是:

neuronal_web_pixel = 0.32 # micrometers

并提出了一种将像素转换为微米的方法:

def pixels_to_scale(df, mind=False, cosmos=False):

one_pixel_equals_parsec = cosmic_web_pixel
one_pixel_equals_micron = neuronal_web_pixel

if mind:
df = df/one_pixel_equals_micron

if cosmos:
df = df/one_pixel_equals_parsec

return df

然后,另一种将转换后的矩阵二值化的方法:

def binarize_matrix(df, mind=False, cosmos=False):

if mind:
brain_Llink = 16.0 # microns
# distances less than 16 microns
brain_mask = (df<=brain_Llink)
# convert to 1
df = df.where(brain_mask, 1.0)

if cosmos:
cosmos_Llink = 1.2 # 1.2 mpc
brain_mask = (df<=cosmos_Llink)
df = df.where(brain_mask, 1.0)

return df

最后,用:

matrix_cerebellum = pixels_to_scale(matrix_cerebellum, mind=True)
matrix_cerebellum = binarize_matrix(matrix_cerebellum, mind=True)

matrix_cerebellum.head(5) 打印我的(大部分)0.0s 和 1.0s 的稀疏矩阵:

0   1   2   3   4   5   6   7   8   9   ... 1848    1849    1850    1851    1852    1853    1854    1855    1856    1857
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 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
2 0.0 0.0 0.0 0.0 0.0 0.0 0.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
3 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
4 0.0 0.0 0.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
5 rows × 1858 columns

现在我想计算:

    网络的
  1. Degree Centrality,由公式给出:

    CD(j) = Kj/n-1

其中 kj 是到/从每个 j-node 的(无向)连接数,n 是节点总数整个网络。

  1. 聚类系数,它量化节点本地附近基础设施的存在,由公式给出:

    C(j) = 2yi/Kj(Kj -1)

其中yjj-node的相邻节点之间的链接数。


为了找到度中心性,我尝试过:

# find connections by adding matrix row values
matrix_cerebellum['K'] = matrix_cerebellum.sum(axis=1)
# applying formula
matrix_cerebellum['centrality'] = matrix_cerebellum['K']/matrix_cerebellum.shape[0]-1

生成:

... K    centrality
9.0 -0.995156
6.0 -0.996771
7.0 -0.996771
11.0 -0.996233
11.0 -0.994080

根据论文,我应该发现:

“对于小脑切片,我们测量了 ∼ 1.9 − 3.7”

对于每个节点的平均连接数。

我还发现了负中心性。


有谁知道如何根据上述数据框应用这些公式?

最佳答案

这不是真正的编程问题,但我会尽力回答。带有数据源的网页指出,大脑样本的相邻矩阵文件给出了连接节点之间的距离,以用于重建网络的图像的像素表示。该论文随后解释说,为了获得真正的邻接矩阵 Mij(仅具有 0 和 1 值),作者将其视为距离最多为 16 微米的连接节点。我没有看到图像中有多少像素对应一微米的信息。这将需要计算作者在计算中使用的相同矩阵 Mij。

此外,值 不是度中心性或聚类系数(取决于节点),而是使用矩阵 Mij 计算的网络中每个节点的平均连接数。然后,该论文将观察到的大脑和宇宙网络中度中心性和聚类系数的分布与人们在具有相同节点数和相同 值的随机网络中看到的分布进行了比较。结论是大脑和宇宙网络是高度非随机的。

编辑:

1. 0.32微米每像素的换算似乎是对的。在包含大脑样本数据(皮层和小脑)的文件中,最大值为 50 像素,此转换对应于 16 微米。这表明该论文的作者已经对矩阵进行了阈值处理,仅在其中列出了不超过 16 微米的距离。鉴于此,要获得仅具有 0 和 1 值的矩阵 Mij,只需将所有非零值替换为 1。一个问题是,使用以这种方式获得的矩阵可以得到小脑的 = 9.22和 = 7.13 为皮层,这有点超出论文中给出的范围。我不知道如何解释这种差异。

2. 负中心值是由于代码中的错误(缺少括号)造成的。应该是:

matrix_cerebellum['centrality'] = matrix_cerebellum['K']/(matrix_cerebellum.shape[0] - 1)

3.可以使用networkx库提供的工具计算每个节点的聚类系数和度中心度:

from astropy.io import fits
import networkx as nx

# get the adjacency matrix for cortex
with fits.open('matrix_CORTEX_large.fits') as data:
M = data[0].data
M[M > 0] = 1

# create a graph object
G_cortex = nx.from_numpy_matrix(M)

# compute degree centrality of all nodes
centrality = nx.degree_centrality(G_cortex)
# compute clustering coefficient of all nodes
clustering = nx.clustering(G_cortex)

关于python - 相邻矩阵中的度中心性和聚类系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69848362/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com