我的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]),)
迁移上述代码的正确方法是什么?你知道吗
它们是等价的。如您所见,Matlab/Octave代码返回1x1维矩阵
a = 33
,而NumPy则返回一维向量a = [32]
。你知道吗它之所以是元组是因为} 。你知道吗
nonzero
为每个维度提供了一个索引元组。 如果您处理的是一维数据(这里可能就是这种情况),您可以考虑改用^{我认为混淆的是,倍频程(可能还有Matlab)将1x1矩阵视为标量,而NumPy则没有。你知道吗
因此,要获得单个条目,只需通过普通索引获取第一个(也是唯一一个)元素:
当在Matlab和NumPy之间切换时,有一点很可能会让你头疼,那就是前者在索引和矩阵形状方面要宽松得多。在NumPy中,形状
(N,)
的数组和(N, 1)
的数组之间存在差异,在例如乘法矩阵时,可能会遇到这种差异。你知道吗相关问题 更多 >
编程相关推荐