fn CovarienceMatrix(borrowed self) -> Matrix:
let transposed_matrix = self.Transpose()
var avg_dataset = Matrix(transposed_matrix.height, 1, Float32(0))
var varience = Matrix(transposed_matrix.height, 1, Float32(0))
var covarince_matrix = Matrix(transposed_matrix.height, transposed_matrix.height, Float32(0))
for i in range(transposed_matrix.height):
@parameter
fn sum_total[num_elmts: Int](j: Int):
avg_dataset[i,0] = avg_dataset[i,0] + transposed_matrix.load[num_elmts](i,j).reduce_add[1]()
vectorize[simd_width, sum_total](transposed_matrix.width)
avg_dataset[i,0] = avg_dataset[i,0] / transposed_matrix.width
for i in range(transposed_matrix.height):
@parameter
fn normalise_total[num_elmts: Int](j: Int):
varience[i,0] = varience[i,0] + pow(transposed_matrix.load[num_elmts](i,j) - avg_dataset[i,0], 2).reduce_add[1]()
vectorize[simd_width, normalise_total](transposed_matrix.width)
varience[i,0] = sqrt(varience[i,0] / transposed_matrix.width)
for i in range(transposed_matrix.height):
for j in range(transposed_matrix.height):
covarince_matrix[i, j] = varience[i,0] * varience[j,0]
return covarince_matrix
fn CovarienceMatrix(borrowed self) -> Matrix:
let transposed_matrix = self.Transpose()
var avg_dataset = Matrix(transposed_matrix.height, 1, Float32(0))
var varience = Matrix(transposed_matrix.height, 1, Float32(0))
var covarince_matrix = Matrix(transposed_matrix.height, transposed_matrix.height, Float32(0))
for i in range(transposed_matrix.height):
@parameter
fn sum_total[num_elmts: Int](j: Int):
avg_dataset[i,0] = avg_dataset[i,0] + transposed_matrix.load[num_elmts](i,j).reduce_add[1]()
vectorize[simd_width, sum_total](transposed_matrix.width)
avg_dataset[i,0] = avg_dataset[i,0] / transposed_matrix.width
for i in range(transposed_matrix.height):
@parameter
fn normalise_total[num_elmts: Int](j: Int):
varience[i,0] = varience[i,0] + pow(transposed_matrix.load[num_elmts](i,j) - avg_dataset[i,0], 2).reduce_add[1]()
vectorize[simd_width, normalise_total](transposed_matrix.width)
varience[i,0] = sqrt(varience[i,0] / transposed_matrix.width)
for i in range(transposed_matrix.height):
for j in range(transposed_matrix.height):
covarince_matrix[i, j] = varience[i,0] * varience[j,0]
return covarince_matrix