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

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都使用了默认的行元素优先的顺序,如果要列元素优先,可改为:

    #获取mask要保留的数据下标
    ids = numpy.where(self.mask.flatten() > 0,order='F')[1];  
    
    # 将一个波段的图像数据转为一列数据,共bands列
    X = numpy.reshape(self.X, (self.nrows*self.ncols,        self.nvar1), ord

你可能感兴趣的:(Python学习总结)