def correlationMatrix(data): _, numCols = shape(data) def matrixEntry(i, j): return correlation(getCol(data, i), getCol(data, j)) return generateMatrix(numCols, numCols, matrixEntry)
def scale(dataMatrix): nRows, nCols = shape(dataMatrix) means = [mean(getCol(dataMatrix, j)) for j in range(nCols)] stdevs = [stdDeviation(getCol(dataMatrix, j)) for j in range(nCols)] return means, stdevs
def rescale(dataMatrix): means, stdevs = scale(dataMatrix) def rescaled(i, j): if(stdevs[j] > 0): return (dataMatrix[i][j] - means[j]) / stdevs[j] else: return dataMatrix[i][j] nRows, nCols = shape(dataMatrix) return generateMatrix(nRows, nCols, rescaled)
def deMeanMatrix(A): nr, nc = shape(A) colMean, _ = scale(A) return generateMatrix(nr, nc, lambda i, j: A[i][j] - colMean[j])