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

2024-04-28 06:32:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

在to执行之后,我得到如下输出:

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)

但是变量的类型是元组

(array([32]),)

迁移上述代码的正确方法是什么?你知道吗


Tags: to方法代码ltnpabs语句variables
1条回答
网友
1楼 · 发布于 2024-04-28 06:32:54

它们是等价的。如您所见,Matlab/Octave代码返回1x1维矩阵a = 33,而NumPy则返回一维向量a = [32]。你知道吗

它之所以是元组是因为nonzero为每个维度提供了一个索引元组。 如果您处理的是一维数据(这里可能就是这种情况),您可以考虑改用^{}。你知道吗

我认为混淆的是,倍频程(可能还有Matlab)将1x1矩阵视为标量,而NumPy则没有。你知道吗

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

a = a[0]

当在Matlab和NumPy之间切换时,有一点很可能会让你头疼,那就是前者在索引和矩阵形状方面要宽松得多。在NumPy中,形状(N,)的数组和(N, 1)的数组之间存在差异,在例如乘法矩阵时,可能会遇到这种差异。你知道吗

相关问题 更多 >