Python 用于numpy、scipy重采样的特定方法
我有一个numpy数组。我想把numpy数组重采样到一个特定的值,比如10Python 用于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
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。