【问题标题】:Are Scipy operations done row-by-row rather than column-by-column as in Matlab?Scipy 操作是逐行而不是像 Matlab 中那样逐列完成的吗?
【发布时间】:2015-08-22 10:21:28
【问题描述】:

我是 NumPy 的新手,SciPy。之前,我使用 Matlab/Octave 已经很长时间了。

似乎scipy.fftpack.fft 对二维数组逐行起作用。对我来说,这非常令人困惑,因为在 Matlab 中,此类操作是逐列完成的。 scipy 中的所有其他操作是否也是逐行执行的?

我可以像在 Matlab 中那样在 NumPy/SciPy 中逐列执行操作吗?

【问题讨论】:

  • numpy 数组默认为C_CONTIGUOUS - 值逐行存储。 MATLAB 在numpy 术语中是F_CONTIGUOUS。例如查看序列 0:12 并将其重塑为 (3,4) 并观察布局。但您可以指定numpy order。这与特定操作在哪个轴上操作的问题有关,但不相同。通常你可以独立于顺序指定轴。
  • 我认为您的问题已得到解答。如果没有完全回答您的问题,您能否接受答案或发表评论?

标签: python matlab numpy


【解决方案1】:

Numpy 的 fft() 接受“轴”参数,因此您可以要求逐列 FFT,而不是默认的逐行 FFT。

例如,以下返回 x 中每一列的 16 点 FFT:(如果您不知道行数,可以为第二个参数指定 None):

 import numpy as np

 x = np.hstack([np.zeros((16,1)), np.ones((16,1))])
 x[0,0] = 1

 f = np.fft.fft(x, 16, 0)   

f 的第一列是一个全为 1 的 delta 函数的 FFT。 f的第二列是常数序列的FFT,是频域中的delta函数。

【讨论】:

  • 了解默认为第二个“轴”是 NumPy 的一般属性还是特定于其 FFT 实现也会很有趣。
  • @A.Donda 真的没有单一的约定。默认情况下,总是在所有轴上进行缩减(例如 sum、max、mean 等)。在其他情况下(例如np.cumsumnp.repeatnp.argsort 等),默认是对展平数组进行操作。有时默认使用最后一个轴(np.diffnp.trapz),但在其他情况下使用第一个轴(np.splitnp.concatenate)。这有点乱,但我不得不说,与 MATLAB 相比,我更喜欢减少 numpy 的默认行为,你必须这样做 sum(sum(x))sum(x(:))
猜你喜欢
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 2020-08-12
  • 2011-12-07
  • 2013-12-17
  • 2014-05-28
  • 2011-12-08
  • 2013-01-26
相关资源
最近更新 更多