在将这行简单的Octave代码转换为Python时,我想知道是否有更快、更干净的方法:
给定两个矩阵,Octave命令使用布尔矩阵R
对一行矩阵Y
求平均值,以标记感兴趣的值:
load (‘mydata.mat’)
row1_mean = mean( Y(1, R(1, :) ) )
又好又快又简单。尝试用Python做到这一点并不那么简洁,但到目前为止,我可以像这样做到:
import numpy as np
from scipy import io as spio
myDict = spio.loadmat(‘mydata.mat’)
Y_mat = myDict['Y']
R_mat = myDict['R']
maskR = ~R_mat.astype(bool)[0][:] # row as boolean so we can invert it
maskR = maskR.astype(int) # turn it back to 1s & 0s
maskedY = np.ma.masked_array(Y_mat[0][:], mask=maskR) # mask row of Y with R matrix
row1_mean = maskedY.mean() # get the mean
我可能错过了一个更好的方法。特别是,有没有一种更简单的方法来求1和0的矩阵?也许还有一种更直接的方法来获得数组切片的平均值(我知道axis
),但是考虑到掩蔽数组吗?
https://stackoverflow.com/questions/53839077
复制相似问题