0

我如何将以下内容从 Matlab 翻译成 Python?我仍在尝试围绕 numpy 中的列表/矩阵和数组等进行思考。

outframe(:,[4:4:nout-1]) = 0.25*inframe(:,[1:n-1]) + 0.75*inframe(:,[2:n])
pos=(beamnum>0)*(beamnum<=nbeams)*(binnum>0)*(binnum<=nbins)*((beamnum-1)*nbins+binnum)
for index =1:512:
outarray(index,:) =uint8(interp1([1:n],inarray64(index,:),[1:.25:n],method))

(还有其他东西,这些只是我不确定如何理解的特定陈述。我导入了 numpy,

4

2 回答 2

1

numpy 中的主要工作是 ndarray(或数组)。当您翻译代码时,它将在很大程度上取代 matlab 矩阵。与 matlab 矩阵一样,ndarray 存储同质数据(即 float64)并针对数值运算进行了优化。

numpy 矩阵是 ndarray 的子类,可以方便一些线性代数密集型应用。是有关两者之间差异的更多信息。

python 列表更像是一个 matlab 元胞数组(尽管不完全相同)。它是基本的 Python 数据结构之一,但在科学应用程序中,我发现它最常出现在您需要保存异构数据时。(或者当你做一些非常简单的事情并且不想麻烦创建一个 numpy 数组时)。

上面的代码可以使用 ndarray 并将 () 替换为 [] 进行索引,并考虑到索引在 MATLAB 中从 1 开始,在 python 中从 0 开始,即:MATLAB 中的第一个元素是元素 1,并且在python它是元素0。

于 2012-06-04T20:57:10.290 回答
0

让我们逐行尝试:

outframe(:,[4:4:nout-1]) = 0.25*inframe(:,[1:n-1]) + 0.75*inframe(:,[2:n])

将用“英语”翻译为:outframe 的所有行,但只有从 4 到 nout-1 的每 4 列(即 4,8 ..)。我假设您了解框架内引用的含义。

pos=(beamnum>0)*(beamnum<=nbeams)*(binnum>0)*(binnum<=nbins)*((beamnum-1)*nbins+binnum)

可能 beamnum 是一个向量,并且 (beamnum >0) 返回一个 {0,1} 的向量,使得元素为“1”,其中相应的 beamnum 元素为 >0,否则为 0。我希望其余部分很清楚。

倒数第二行是一个 for 循环,最后一行应该是清晰的。

于 2012-06-04T15:46:35.790 回答