Matlab 到 Python:返回数组而不是整数

Matlab to Python : returning an array instead of integer

我的 Matlab 代码中有一个语句:

a = find(abs(ASE_lamda-YDFA_lam_s)<1e-15);

执行后得到的输出为:

octave:50> whos a
Variables in the current scope:

   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  ===== 
        a           1x1                          8  double

Total is 1 element using 8 bytes

octave:51> a
a =  33

我已在以下方法中使用 NumPy 包将代码迁移到 Python:

a = np.nonzero(np.abs(ASE_lamda-YDFA_lam_s)<1e-15)

但是变量a的类型是元组

(array([32]),)

迁移上述代码的正确方法是什么?

它们是等价的。如您所见,您的 Matlab/Octave 代码返回了 1x1 维矩阵 a = 33 而 NumPy 为您提供了一维向量 a = [32].

它是元组的原因是因为 nonzero 为您提供了每个维度的索引元组。 如果您正在处理一维数据(这里可能就是这种情况),您可以考虑使用 numpy.flatnonzero

我认为令人困惑的是 Octave(可能还有 Matlab)将 1x1 矩阵视为标量,而 NumPy 却没有。

因此,要获得单个条目,您只需通过正常索引获取第一个(也是唯一一个)元素:

a = a[0]

在 Matlab 和 NumPy 之间切换时,您可能会感到困扰的一点是,前者在索引和矩阵形状方面更为宽松。在 NumPy 中,形状为 (N,)(N, 1) 的数组之间存在差异,例如,您可能会 运行乘法矩阵。