completed UpdateWithGoodIds
This commit is contained in:
parent
b991153b8b
commit
d337fba6fd
@ -12,18 +12,33 @@ public class Matrix2 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Matrix2 Identity(int size) {
|
public static Matrix2 Identity(int size) {
|
||||||
float[,] I = new float[size, size];
|
return Diagonal(1, size);
|
||||||
for (int i = 0; i < size; i++) I[i, i] = 1.0f;
|
// float[,] resultData = new float[size, size];
|
||||||
return new Matrix2(I);
|
// for (int i = 0; i < size; i++)
|
||||||
|
// resultData[i, i] = 1.0f;
|
||||||
|
// return new Matrix2(resultData);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Matrix2 Diagonal(Matrix1 v) {
|
||||||
|
float[,] resultData = new float[v.magnitude, v.magnitude];
|
||||||
|
for (int ix = 0; ix < v.magnitude; ix++)
|
||||||
|
resultData[ix, ix] = v.data[ix];
|
||||||
|
return new Matrix2(resultData);
|
||||||
|
}
|
||||||
|
public static Matrix2 Diagonal(float f, int size) {
|
||||||
|
float[,] resultData = new float[size, size];
|
||||||
|
for (int ix = 0; ix < size; ix++)
|
||||||
|
resultData[ix, ix] = f;
|
||||||
|
return new Matrix2(resultData);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Matrix2 Transpose() {
|
public Matrix2 Transpose() {
|
||||||
float[,] r = new float[this.nCols, this.nRows];
|
float[,] resultData = new float[this.nCols, this.nRows];
|
||||||
for (uint rowIx = 0; rowIx < this.nRows; rowIx++) {
|
for (uint rowIx = 0; rowIx < this.nRows; rowIx++) {
|
||||||
for (uint colIx = 0; colIx < this.nCols; colIx++)
|
for (uint colIx = 0; colIx < this.nCols; colIx++)
|
||||||
r[colIx, rowIx] = this.data[rowIx, colIx];
|
resultData[colIx, rowIx] = this.data[rowIx, colIx];
|
||||||
}
|
}
|
||||||
return new Matrix2(r);
|
return new Matrix2(resultData);
|
||||||
// double checked code
|
// double checked code
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,36 +105,62 @@ public class Matrix2 {
|
|||||||
return A * scalar;
|
return A * scalar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Matrix2 Slice(int from, int to) {
|
||||||
|
if (from < 0 || to >= this.nRows)
|
||||||
|
throw new System.ArgumentException("Slice index out of range.");
|
||||||
|
|
||||||
|
float[,] result = new float[to - from, this.nCols];
|
||||||
|
int resultRowIx = 0;
|
||||||
|
for (int rowIx = from; rowIx < to; rowIx++) {
|
||||||
|
for (int colIx = 0; colIx < this.nCols; colIx++) {
|
||||||
|
result[resultRowIx, colIx] = this.data[rowIx, colIx];
|
||||||
|
}
|
||||||
|
resultRowIx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Matrix2(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Matrix1 {
|
public class Matrix1 {
|
||||||
public float[] data { get; }
|
public float[] data { get; }
|
||||||
|
|
||||||
public int size => data.GetLength(0);
|
public int magnitude => data.GetLength(0);
|
||||||
|
|
||||||
public Matrix1(float[] data) {
|
public Matrix1(float[] data) {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Matrix2 Transpose() {
|
public Matrix2 Transpose() {
|
||||||
float[,] r = new float[1, this.size];
|
float[,] r = new float[1, this.magnitude];
|
||||||
for (uint colIx = 0; colIx < this.size; colIx++)
|
for (uint colIx = 0; colIx < this.magnitude; colIx++)
|
||||||
r[1, colIx] = this.data[colIx];
|
r[1, colIx] = this.data[colIx];
|
||||||
|
|
||||||
return new Matrix2(r);
|
return new Matrix2(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float Dot(Matrix1 a, Matrix1 b) {
|
public static float Dot(Matrix1 a, Matrix1 b) {
|
||||||
if (a.size != b.size)
|
if (a.magnitude != b.magnitude)
|
||||||
throw new System.ArgumentException("Vectors must be of the same length.");
|
throw new System.ArgumentException("Vectors must be of the same length.");
|
||||||
|
|
||||||
float result = 0.0f;
|
float result = 0.0f;
|
||||||
for (int i = 0; i < a.size; i++) {
|
for (int i = 0; i < a.magnitude; i++) {
|
||||||
result += a.data[i] * b.data[i];
|
result += a.data[i] * b.data[i];
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Matrix1 Slice(int from, int to) {
|
||||||
|
if (from < 0 || to >= this.magnitude)
|
||||||
|
throw new System.ArgumentException("Slice index out of range.");
|
||||||
|
|
||||||
|
float[] result = new float[to - from];
|
||||||
|
int resultIx = 0;
|
||||||
|
for (int ix = from; ix < to; ix++)
|
||||||
|
result[resultIx++] = this.data[ix];
|
||||||
|
|
||||||
|
return new Matrix1(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Matrix {
|
public class Matrix {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user