Matlab与Python中find/where、reshape、eig的区别

本文探讨了Matlab与Python中find/where、reshape及eig函数的区别。Matlab中find和reshape采用列优先排序,Python的numpy.reshape默认行优先,但可通过order='F'调整。numpy.where返回的是全下标,若要模拟Matlab的find,需先flatten。在eig方面,Matlab的特征值默认降序,特征向量对应,Python则无排序,需要手动排序以匹配Matlab结果。此外,Matlab的特征向量按行,Python按列组织。
摘要由CSDN通过智能技术生成
Matlab与Python中find/where、reshape、eig的区别
  • find/where、reshape的区别

    Matlab中,矩阵的单下标是列元素优先的,所以find、reshape得到的结果都是列元素优先的排序方式。

    而Python中,通过numpy使用矩阵,其单下标是行元素优先的,所以,reshape得到的结果都是按行元素优先排列的;不过,可以通过设置参数order=’F’,使其排序和matlab中的一样,当where和reshape配合使用的来过滤数据的时候,要保证数据排序的一致。

    numpy.where返回的结果是全下标方式,而不是单下标,和find不同,如果要实现和find一样的单下标,可将矩阵flatten成一维数据,再使用where获得全下标,取其中的单个下标来使用即可。如下:

    #获取mask要保留的数据下标
    ids = np.where(self.mask.flatten() > 0)[1];  
    
    # 将一个波段的图像数据转为一列数据,共bands列
    X = np.reshape(self.X, (self.nrows*self.ncols,        self.nvar1))
    Y = np.reshape(self.Y, (self.nrows*self.ncols, self.nvar2))
    
    # 每个波段只保留要的值,保留相应的行
    XMask = X[ids, :]
    YMask = Y[ids, :]
    

    这里,flatten和reshape都使用了默认的行元素优先的顺序,如果要列元素优先,可改为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值