对于m×n矩阵,计算所有列(n x n)的互信息的最佳(最快)方式是什么?

I(X, Y) = H(X) + H(Y) – H(X,Y)

其中H(X)是指X的香农熵。

目前我正在使用np.histogram2d和np.histogram来计算关节(X,Y)和单个(X或Y)计数。对于给定的矩阵A(例如,一个250000×1000的浮点矩阵),我正在做一个嵌套for循环,

n = A.shape[1]

for ix = arange(n)

for jx = arange(ix+1,n):

matMI[ix,jx]= calc_MI(A[:,ix],A[:,jx])

当然必须有更好/更快的方式来做到这一点吗?

除此之外,我还在数组上的列(列或行操作)上查找映射函数,但还没有找到一个很好的一般答案。

这是我的完整实现,遵循the Wiki page中的约定:

import numpy as np

def calc_MI(X,Y,bins):

c_XY = np.histogram2d(X,Y,bins)[0]

c_X = np.histogram(X,bins)[0]

c_Y = np.histogram(Y,bins)[0]

H_X = shan_entropy(c_X)

H_Y = shan_entropy(c_Y)

H_XY = shan_entropy(c_XY)

MI = H_X + H_Y - H_XY

return MI

def shan_entropy(c):

c_normalized = c / float(np.sum(c))

c_normalized = c_normalized[np.nonzero(c_normalized)]

H = -sum(c_normalized* np.log2(c_normalized))

return H

A = np.array([[ 2.0, 140.0, 128.23, -150.5, -5.4 ],

[ 2.4, 153.11, 130.34, -130.1, -9.5 ],

[ 1.2, 156.9, 120.11, -110.45,-1.12 ]])

bins = 5 # ?

n = A.shape[1]

matMI = np.zeros((n, n))

for ix in np.arange(n):

for jx in np.arange(ix+1,n):

matMI[ix,jx] = calc_MI(A[:,ix], A[:,jx], bins)

虽然我的嵌套for循环的工作版本以合理的速度进行,我想知道是否有更好的方法来应用calc_MI在A的所有列(以计算它们的成对互信息)?

我也想知道:

>是否有有效的方法来映射函数来操作np.arrays的列(或行)(可能像np.vectorize,它看起来更像一个装饰器)?

>这个具体计算是否还有其他最佳实现(互信息)?

两个三维图像互信息python_python – 使用numpy计算成对互信息的最佳方式相关推荐

  1. 用pytorch及numpy计算成对余弦相似性矩阵,并用numpy实现kmeans聚类

      sklearn和scipy里面都提供了kmeans聚类的库,但是它们都是根据向量直接进行计算欧氏距离.闵氏距离或余弦相似度,如果使用其他的度量函数或者向量维度非常高需要先计算好度量距离然后再聚类时 ...

  2. 【深度学习的数学】绘制2×3×1层带sigmoid激活函数的神经网络感知机输出函数的三维图像(神经网络参数使用正态分布随机数)

    阅读博客时,神经网络的输入变量刚好为两个,输出变量为1个,于是想绘制一下输出函数的三维图像是什么样的 代码 # -*- coding: utf-8 -*- """ @Fi ...

  3. 【Python】函数图像绘制:二维图像、三维图像、散点图、心形图

    [Python]函数图像绘制:二维图像.三维图像.散点图.心形图 所有需要用的包 二维图像 三维图像 散点图绘制 心形图绘制 所有需要用的包 from mpl_toolkits.mplot3d imp ...

  4. “后浪95后”吴尚哲的 CVPR 最佳论文:无需任何监督,即可重建三维图像

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 我有一张二维照片,能让它变成三维图像么?可以,当前的一些3D电影相册工具,给图片加一个相框也能形成动态 ...

  5. python【Matlibplot绘图库】-绘制三维图像

    文章目录 1.绘制三维图像 2.plt.axes() 1.绘制三维图像 import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import ...

  6. python绘制3维图-python——绘制二元高斯分布的三维图像,

    在对数据进行可视化的过程中,可能经常需要对数据进行三维绘图,在python中进行三维绘图其实是比较简单的,下面我们将给出一个二元高斯分布的三维图像案例,并且给出相关函数的参数. 通常,我们绘制三维图像 ...

  7. VTK修炼之道27:图像基本操作_三维图像切片交互提取(回调函数、观察者-命令模式)

    1.鼠标滑动提取三维图像切片 学习三维图像切面的提取后,我们可以实现一个稍微复杂的程序--通过滑动鼠标来切换三维图像切片,这也是医学图像处理软件中一个很基本的功能.实现该功能难点是怎样在VTK中控制鼠 ...

  8. VTK-医学三维图像四视图显示以及鼠标滑轮控制切片交互

    VTK-医学三维图像四视图显示以及鼠标滑轮控制切片交互 一.四视图介绍 vs直接创建Qt Widgets Application项目 四视图界面,采用vtk和QVTKOpenGLNativeWidge ...

  9. 浅谈二维和三维图像数据

    首先对于任何一个二维图像,加载入内存后都能看作一个二维像素数组.假如是一张8位图像,它的每个像素值可以用一个0~255的unsigned char表示,也就是说图像可以看成一个unsigned cha ...

最新文章

  1. 我对她说,你能不能换件衣服?换种心情?换种脾气?她说,可以,换个人就行了···...
  2. leetcode2. 两数相加--每天刷一道leetcode系列!
  3. 干货回顾丨深度学习应用大盘点
  4. Web服务器的工作原理
  5. python【Numpy科学计算库】Numpy的超实用基础详细教程(看不懂你来打我)
  6. 页面上水平飞舞的图片
  7. 【DIY】可能是最简单便宜的DIY温湿度计,arduino温湿度计
  8. POJ 3617 Best Cow Line 贪心算法
  9. 把Hybris Commerce本地tomcat的keystore给本机的tomcat使用
  10. 【转】C++ _T()函数和_L()函数介绍
  11. 计算机学业测试答案解析,计算机测试题及答案.doc
  12. java 大小固定_为什么Java堆的最大大小是固定的?
  13. 手把手教你进行R语言的安装及安装过程中相关问题解决方案
  14. TransE模型学习笔记
  15. 启动mongoDB服务
  16. 微信服务器IP地址清单
  17. ReportingService报表入门
  18. 微信群控的服务器怎么用,微信群控开发SDK使用教程--手机客户端返回聊天消息的原始内容给服务端...
  19. docker bind source path does not exist: /etc/timezone“
  20. 使用EKF融合odometry及imu数据

热门文章

  1. 内部网站更换服务器,网站更换服务器的具体操作流程!
  2. 无线呼叫服务器对码设置,楼层呼叫器对码方式种类
  3. 什么是“可证伪性”?
  4. 将yolo标注转换为tensorflow_yolov3标注生成train.txt和test.txt同时做数据清洗
  5. python opencv 官方文档里LaTeX公式不能正常显示怎么办?
  6. Tensorflow yolov3 Intel Realsense D435 单摄像头下各模块识别时间测试
  7. python 为什么要用astype()函数对numpy数据类型进行转换,而不直接指定其dtype?float(64) float(32) int(64) int(32)(转换为整型int)
  8. 跟着书本学习CSS(2)
  9. RocketMQ(五):教你如何调试源代码
  10. Elasticsearch 如何把SQL转换为DSL