在文本文件中读取具有浮点值的numpy数组

时间:2014-07-25 12:08:59

标签: python arrays numpy

我根本不懂python,因此我在解释类似的先前答案并使用它们时未能成功。

我有一个我希望在unix中执行的python脚本。该脚本使用输入文件,但我不明白如何确保输入文件被读取为numpy float数组。

我的输入文件名为chk.bed,它有一列数值

-bash-4.1$ # head chk.bed
7.25236
0.197037
0.189464
2.60056
0
32.721
11.3978
3.85692
0
0

原始脚本是 -

from scipy.stats import gaussian_kde
import numpy as np

#assume "fpkm" is a NumPy array of log2(fpkm) values

kernel = gaussian_kde(fpkm)
xi = np.linspace(fpkm.min(), fpkm.max(), 100)
yi = kernel.evaluate(xi)
mu = xi[np.argmax(yi)]
U = fpkm[fpkm > mu].mean()
sigma = (U - mu) * np.sqrt(np.pi / 2)
zFPKM = (fpkm - mu) / sigma

到目前为止我能理解的是确保脚本正在读取文件,所以我包括 fpkm = open(" chk.bed",' r') 代码。

但是在执行代码时 - 我收到以下错误 -

Traceback (most recent call last):

  File "./calc_zfpkm.py", line 10, in <module>
    kernel = gaussian_kde(fpkm)

  File "/usr/lib64/python2.6/site-packages/scipy/stats/kde.py", line 88, in __init__
    self._compute_covariance()

  File "/usr/lib64/python2.6/site-packages/scipy/stats/kde.py", line 340, in _compute_covariance
    self.factor * self.factor)

  File "/usr/lib64/python2.6/site-packages/numpy/lib/function_base.py", line 1971, in cov
    X = array(m, ndmin=2, dtype=float)

TypeError: float() argument must be a string or a number

这似乎表明我没有正确读取文件,因此函数gaussian_kde()无法读取值为float。

你能帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您将文件对象传递给gaussian_kde但是它需要NumPy数组,您需要先使用numpy.loadtxt来加载数组中的数据:

>>> import numpy as np
>>> arr = np.loadtxt('chk.bed')
>>> arr
array([  7.25236 ,   0.197037,   0.189464,   2.60056 ,   0.      ,
        32.721   ,  11.3978  ,   3.85692 ,   0.      ,   0.      ])
>>> gaussian_kde(arr)
<scipy.stats.kde.gaussian_kde object at 0x7f7350390190>

答案 1 :(得分:-2)

在这里你可以找到

用于zFPKM规范化的R脚本。

我从上面给出的python代码以及此链接中获得了灵感:https://www.biostars.org/p/94680/

install.packages("ks","pracma")
library(ks)
library(pracma)

/ * fpkm是一个示例数据* /

fpkm&lt; - c(1,2,3,4,5,6,7,8,4,5,6,5,6,5,6,5,5,5,5,6,6 ,78,8,89,8,8,8,2,2,2,1,1,4,4,4,4,4,4,4,4,4,4,4,3,2,2 ,3,23,2,3,23,4,2,2,4,23,2,2,24,4,4,2,2,4,4,4,2,2,4,4,2 ,2,4,2,45,5,5,5,3,2,2,4,4,4,4,4,4,4,4,4,3,2,2,3,23,2 ,3,23,4,2,2,4,23,2,2,24,4,4,2,2,4,4,4,2,2,4,4,2,2,4,2 ,45,5,5,5,3,2,2)

 xi=linspace(min(fpkm),max(fpkm),100)
fhat = kde(x=fpkm,gridsize=100,eval.points=xi)

/ *这里我把数字= 0。如果我不对数字进行舍入(yi),结果会有所改变。* /

yi=round(fhat$estimate,digits=0)
mu=xi[which.max(yi)]
U=mean(fpkm[fpkm>mu])
sigma=(U-mu)* (sqrt(pi/2))
zFPKM = (fpkm - mu) / sigma

我可以对RPKM应用相同的方法吗?

Cankut CUBUK

计算基因组学计划 - 系统基因组学实验室

CentrodeInvestigaciónPríncipeFelipe(CIPF)

C / EduardoPrimoYúferanº3

46012西班牙巴伦西亚

http://bioinfo.cipf.es