【问题标题】:Matlab to Python Translation - Dividing ArraysMatlab 到 Python 的翻译 - 划分数组
【发布时间】:2018-02-23 02:01:01
【问题描述】:

好的,我有以下代码,但我似乎无法弄清楚为什么它们不做同样的事情,我正在尝试复制 Matlab:

Matlab

buflen = 1024
overlap = 512

blend = ones(buflen,1);
blend(1:overlap+1) = 0:1/overlap:1;
blend(buflen-overlap:buflen) = 1:-1/overlap:0

Python

buflen = 1024
overlap = 512

blend = np.ones(buflen)
blend[0:overlap+1] = np.arange(0,2)/np.arange(overlap:1)
blend[buflen-overlap-1:buflen] = np.arange(1,-1)/np.arange(overlap,0)

我目前停留在主代码的第二行,在 matlab 中“0:1/overlap:1”以 0.001953125 的步长生成一个从 0 到 1 的 513x1 数组。

在 Python 中,"np.arange(0,2)/np.arange(overlap:1)" 它只是不起作用。 我无法弄清楚 Matlab 中发生了什么。

有什么想法吗?

【问题讨论】:

  • 你为什么不用np.arange(start,end,STEP)?
  • 最干净的可能是np.linspace(0, 1, overlap+1)

标签: python arrays matlab numpy


【解决方案1】:

我不确定,但您是否可能只是误读了 Matlab 语法。使用括号可能有助于澄清一点:

  1. 0:(1/overlap):1
  2. 不一样
  3. (0:1)/(overlap:1)

第一个意味着从01(1/overlap) 为步长,而第二个是试图划分两个数组。

如果你想让 Python 表现得像第一个代码 sn-p 你应该使用

np.arange(0, 1 + (1/overlap), 1/overlap)

或者像@PaulPanzer 建议的那样更好

np.linspace(0, 1, 1+overlap)

【讨论】:

  • 完美,您所说的问题是我如何阅读 matlab 代码!也非常感谢您推荐 np.linspace。
猜你喜欢
  • 2016-10-27
  • 2021-11-06
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
相关资源
最近更新 更多