如何在值矩阵之上绘制树形图,在Python中适当地重新排序以反映聚类?一个例子如下图:
https://publishing-cdn.elifesciences.org/07103/elife-07103-fig6-figsupp1-v2.jpg
我使用scipy.cluster.dendrogram来制作树形图并对数据矩阵执行层次聚类.然后,我如何将数据绘制为矩阵,其中行已重新排序以反映在特定阈值处切割树状图所引起的聚类,并将树状图绘制在矩阵旁边?我知道如何在scipy中绘制树形图,而不是如何在其旁边的右侧比例尺绘制数据的强度矩阵.
任何有关这方面的帮助将不胜感激.
我正在尝试在python中实现具有200k +数据点的1000维数据的算法.我想使用numpy,scipy,sklearn,networkx和其他有用的库.我想执行所有点之间的成对距离等操作,并在所有点上进行聚类.我已经实现了以合理的复杂度执行我想要的工作算法但是当我尝试将它们扩展到我的所有数据时,我用完了ram.我当然这样做,在200k +数据上创建成对距离的矩阵需要很多内存.
接下来是:我真的很想在具有少量内存的糟糕计算机上执行此操作.
有没有可行的方法让我在没有低ram限制的情况下完成这项工作.它需要更长的时间才真正不是问题,只要时间要求不会无限!
我希望能够让我的算法工作,然后在一小时或五个小时后回来,而不是因为它用完了公羊而被卡住了!我想在python中实现它,并能够使用numpy,scipy,sklearn和networkx库.我希望能够计算到我所有点的成对距离等
这可行吗?我将如何解决这个问题,我可以开始阅读哪些内容?
最好的问候//梅斯默
我有一个1维数组,我可以计算这个样本的"均值"和"标准偏差"并绘制"正态分布",但我有一个问题:
我想在下图中绘制数据和正态分布:
我不知道如何绘制"数据"和"正态分布"
关于"scipy.stats中的高斯概率密度函数"的任何想法?
s = np.std(array)
m = np.mean(array)
plt.plot(norm.pdf(array,m,s))
Run Code Online (Sandbox Code Playgroud) 我正在尝试着色使用创建的Voronoi图scipy.spatial.Voronoi.这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d
# make up data points
points = np.random.rand(15,2)
# compute Voronoi tesselation
vor = Voronoi(points)
# plot
voronoi_plot_2d(vor)
# colorize
for region in vor.regions:
if not -1 in region:
polygon = [vor.vertices[i] for i in region]
plt.fill(*zip(*polygon))
plt.show()
Run Code Online (Sandbox Code Playgroud)
结果图像:

正如您所看到的,图像边界处的一些Voronoi区域没有着色.这是因为这些区域的Voronoi顶点的一些索引被设置为-1,即,对于Voronoi图之外的那些顶点.根据文件:
区域:(整数列表,形状(nregions,*))形成每个Voronoi区域的Voronoi顶点的索引.-1表示Voronoi图外的顶点.
为了使这些区域着色,我试图从多边形中删除这些"外部"顶点,但这不起作用.我想,我需要在图像区域的边界填写一些点,但我似乎无法弄清楚如何合理地实现这一点.
有人可以帮忙吗?
我试图将分段线性拟合拟合为数据集,如图1所示

这个数字是通过设置线条获得的.我试图使用代码应用分段线性拟合:
from scipy import optimize
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,11, 12, 13, 14, 15])
y = np.array([5, 7, 9, 11, 13, 15, 28.92, 42.81, 56.7, 70.59, 84.47, 98.36, 112.25, 126.14, 140.03])
def linear_fit(x, a, b):
return a * x + b
fit_a, fit_b = optimize.curve_fit(linear_fit, x[0:5], y[0:5])[0]
y_fit = fit_a * x[0:7] + fit_b
fit_a, fit_b = optimize.curve_fit(linear_fit, x[6:14], y[6:14])[0]
y_fit = np.append(y_fit, …Run Code Online (Sandbox Code Playgroud) 使用train_test_split()时如何获取数据的原始索引?
我所拥有的是以下内容
from sklearn.cross_validation import train_test_split
import numpy as np
data = np.reshape(np.randn(20),(10,2)) # 10 training examples
labels = np.random.randint(2, size=10) # 10 labels
x1, x2, y1, y2 = train_test_split(data, labels, size=0.2)
Run Code Online (Sandbox Code Playgroud)
但这并没有给出原始数据的索引.一种解决方法是将索引添加到数据(例如data = [(i, d) for i, d in enumerate(data)]),然后将其传递到内部train_test_split,然后再次展开.有没有更清洁的解决方案?
我做了很多统计工作,并使用Python作为我的主要语言.我使用的一些数据集虽然可以占用20GB的内存,但这使得使用numpy,scipy和PyIMSL中的内存函数对它们进行操作几乎是不可能的.统计分析语言SAS在这里具有很大的优势,因为它可以对来自硬盘的数据进行操作而不是严格的内存处理.但是,我想避免在SAS中编写大量代码(出于各种原因),因此我试图确定我使用Python的选项(除了购买更多的硬件和内存).
我应该澄清一下像map-reduce这样的方法对我的大部分工作都无济于事,因为我需要对完整的数据集进行操作(例如计算分位数或拟合逻辑回归模型).
最近我开始玩h5py并认为这是我发现允许Python像SAS一样操作磁盘上的数据(通过hdf5文件),同时仍然能够利用numpy/scipy/matplotlib等的最佳选择.我想听听是否有人在类似设置中使用Python和h5py以及他们发现了什么.有没有人能够在迄今为止由SAS主导的"大数据"设置中使用Python?
编辑:购买更多硬件/内存当然可以提供帮助,但从IT角度来看,当Python(或R或MATLAB等)需要在内存中保存数据时,我很难将Python出售给需要分析大量数据集的组织.SAS继续在这里有一个强大的卖点,因为虽然基于磁盘的分析可能会更慢,但您可以放心地处理大量数据集.因此,我希望Stackoverflow可以帮助我弄清楚如何降低使用Python作为主流大数据分析语言的感知风险.
我之前和其他人见过这个问题,但还没有找到解决办法.
我所要做的就是:
from scipy.misc import imread
我明白了
/home1/users/joe.borg/<ipython-input-2-f9d3d927b58f> in <module>()
----> 1 from scipy.misc import imread
/software/Python/272/lib/python2.7/site-packages/scipy/misc/__init__.py in <module>()
16 try:
17 from pilutil import *
---> 18 __all__ += pilutil.__all__
19 except ImportError:
20 pass
NameError: name 'pilutil' is not defined
Run Code Online (Sandbox Code Playgroud)
但是当我from pilutil import *自己做的时候没有问题(没有导入错误).甚至....../site-packages/scipy/misc/pilutil.py存在,所以我不知道为什么会失败.
我有一个ndarray与在蟒蛇dtype的float64.我想将数组转换为整数数组.我该怎么做?
int()将无法正常工作,因为它说它无法将其转换为标量.dtype显然改变字段本身不起作用,因为实际字节没有改变.我似乎无法在Google或文档中找到任何内容 - 最好的方法是什么?
对于mxn矩阵,计算所有列对(nxn)的互信息的最佳(最快)方法是什么?
通过互信,我的意思是:
I(X,Y)= H(X)+ H(Y) - H(X,Y)
其中H(X)是指的香农熵X.
目前我正在使用np.histogram2d并np.histogram计算关节(X,Y)和个体(X或Y)计数.对于给定的矩阵A(例如250000 X 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])
Run Code Online (Sandbox Code Playgroud)
当然必须有更好/更快的方法来做到这一点?
顺便说一句,我也在数组上寻找列(列式或行式操作)的映射函数,但还没有找到一个很好的通用答案.
这是我的完整实现,遵循Wiki页面中的约定:
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 …Run Code Online (Sandbox Code Playgroud) python ×10
scipy ×10
numpy ×5
matplotlib ×3
arrays ×1
bigdata ×1
h5py ×1
hdf5 ×1
performance ×1
piecewise ×1
sas ×1
scikit-learn ×1
voronoi ×1