Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于numpy、scipy重采样的特定方法_Python_Biopython - Fatal编程技术网

Python 用于numpy、scipy重采样的特定方法

Python 用于numpy、scipy重采样的特定方法,python,biopython,Python,Biopython,我有一个numpy数组。我想把numpy数组重采样到一个特定的值,比如10 X = [[ 6.99749994 17.76250029 5.01699996] [ 10.5150001 18.28000021 4.06300002] [ 12.47374988 19.4937501 6.93949986] [ 15.38050032 21.92675018 6.68924999] [ 17.19525003 19.2534

我有一个numpy数组。我想把numpy数组重采样到一个特定的值,比如10

 X = [[  6.99749994  17.76250029   5.01699996]
     [ 10.5150001   18.28000021   4.06300002]
     [ 12.47374988  19.4937501    6.93949986]
     [ 15.38050032  21.92675018   6.68924999]
     [ 17.19525003  19.25349998   7.71924984]
     [ 15.75849962  17.17449951   5.07899988]
     [ 16.83874989  19.46924973   2.56125003]
     [ 20.24999952  19.40649986   3.77824998]
     [ 20.32649994  15.83099985   3.59350002]
     [ 19.17724943  15.48849988   0.23099999]
     [ 21.44624996  18.01575041  -0.98599999]
     [ 24.13700008  16.26849985   0.35250001]
     [ 23.45549965  13.07250023  -0.88625002]
     [ 22.66449976  14.09524989  -4.22149998]
     [ 25.57133357  15.34866651  -4.50566673]
     [ 27.54475021  12.71549988  -4.02225   ]
     [ 25.7732501   11.273       -6.82424998]
     [ 26.65899976  13.21299966  -9.15133333]
     [ 27.97424984  12.19199991 -12.32075   ]
     [ 26.63675022   8.88499999 -11.40549994]] 
现在我的numpy阵列为3x20维。我想重新采样到3x10。 我如何使用Biopython、numpy或scipy做到这一点

这是我需要转换成python的重采样函数。pastebin.com/JsGeNyLp
如果输入是numpy数组,N是任何整数值,例如10,但问题有点模糊,如果您要做的只是随机从
numpy
数组中选择一些元素,python有一个方便的
随机
模块,可以让您这样做:

import random

resampled_X = random.random_sample(X, 10)
查看链接的MATLAB代码,除了这个,您可能还需要一些1d插值。同样,如果你的问题没有更多细节,很难说得确切,但是
scipy
实际上有一个
interp1d
函数,就像MATLAB一样。您可以这样使用它:

from scipy.interpolate import interp1d
x = range(30)
y = [i**2 for i in x]
# quadratic can be replaced with linear, cubic, or just a number for polynomial degree
new_function = interp1d(x, y, 'quadratic')
new_function(1.5)
>>> 2.25
在阅读了您的代码之后,我可以将其翻译成
numpy
scipy
代码,但对于“重采样”来说,这是一个非常不直观的定义

这段代码基本上是这样做的:

  • 构建从数组中的一个条目到下一个条目的变化幅度列表。(规范清单)
  • 使用cumsum规范化该列表,使其成为“此列表中所有更改的百分比”列表(cumdel)
  • 沿每列(示例中的三列中的一列)插值,然后根据添加的
    n
    从零到一(解决方案空间)的邻域空间采样(返回线)

这是一件很奇怪的事情,但它就是这么做的。如果您还有任何问题,请告诉我。

虽然问题有点模糊,但如果您希望做的只是从
numpy
数组中随机选择一些元素,python有一个方便的
random
模块,可以让您这样做:

import random

resampled_X = random.random_sample(X, 10)
查看链接的MATLAB代码,除了这个,您可能还需要一些1d插值。同样,如果你的问题没有更多细节,很难说得确切,但是
scipy
实际上有一个
interp1d
函数,就像MATLAB一样。您可以这样使用它:

from scipy.interpolate import interp1d
x = range(30)
y = [i**2 for i in x]
# quadratic can be replaced with linear, cubic, or just a number for polynomial degree
new_function = interp1d(x, y, 'quadratic')
new_function(1.5)
>>> 2.25
在阅读了您的代码之后,我可以将其翻译成
numpy
scipy
代码,但对于“重采样”来说,这是一个非常不直观的定义

这段代码基本上是这样做的:

  • 构建从数组中的一个条目到下一个条目的变化幅度列表。(规范清单)
  • 使用cumsum规范化该列表,使其成为“此列表中所有更改的百分比”列表(cumdel)
  • 沿每列(示例中的三列中的一列)插值,然后根据添加的
    n
    从零到一(解决方案空间)的邻域空间采样(返回线)


这是一件很奇怪的事情,但它就是这么做的。如果您还有任何问题,请告诉我。

将numpy数组重新采样到特定值,比如10,这意味着什么?你能编辑你的问题以包含你的预期输出吗?这意味着现在我的矩阵是3x20。我想将其重新采样为3x10新值应该是什么?插值\以某种方式计算,或只是随机丢弃一半?@sam你应该真正解释你想要做什么,而不是期望我们用极其简洁和不透明的变量名通读未记录的MATLAB。@sam我已经破译了MATLAB,并以Python的形式拼凑了它的函数,并在下面进行了解释,“将numpy数组重新采样到一个特定的值,比如说10”是什么意思?你能编辑你的问题以包含你的预期输出吗?这意味着现在我的矩阵是3x20。我想将其重新采样为3x10新值应该是什么?插值\以某种方式计算,或只是随机丢弃一半?@sam你应该真正解释你想要做什么,而不是期望我们用极其简洁和不透明的变量名通读未记录的MATLAB。@sam我已经破译了MATLAB,然后以某种Python的形式拼凑出它的函数,并在下面解释。norms=np.linalg.norm(X[1:]-X[:-1],axis=0)。tolist()而不是列表理解呢?而且由于您将numpy作为np导入,您可能不想使用
numpy。
@chthonicdaemon听起来很合理。匆忙编写了这段代码。它有一个错误:Indexer错误:对于大小为3的轴0,索引3超出范围,但谢谢。我理解code@sam那可能是因为你的斧子被翻转了。描述中的矩阵是
20,3
,而不是
3,20
。如果你把它转过来,这应该行得通。@sam哦,哎呀。看起来chthonicdaemon的密码也被完全破坏了。不必费心检查,将其切换回旧的列表comp.norms=np.linalg.norm(X[1:]-X[:-1],axis=0).tolist()而不是列表理解呢?而且由于您将numpy作为np导入,您可能不想使用
numpy。
@chthonicdaemon听起来很合理。匆忙编写了这段代码。它有一个错误:Indexer错误:对于大小为3的轴0,索引3超出范围,但谢谢。我理解code@sam那可能是因为你的斧子被翻转了。描述中的矩阵是
20,3
,而不是
3,20
。如果你把它转过来,这应该行得通。@sam哦,哎呀。看起来chthonicdaemon的密码也被完全破坏了。没有费心去检查,把它切换回原来的列表comp。