forked from SciSharp/NumSharp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNdArray.Dot.cs
More file actions
78 lines (66 loc) · 3.58 KB
/
NdArray.Dot.cs
File metadata and controls
78 lines (66 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;
using NumSharp.Shared;
namespace NumSharp.Extensions
{
public static partial class NDArrayExtensions
{
public static NDArray<TData> Dot<TData>(this NDArray<TData> np1, NDArray<TData> np2)
{
dynamic prod = new NDArray<TData>();
dynamic np1Dyn = np1.Data.ToArray();
dynamic np2Dyn = np2.Data.ToArray();
var dataType = typeof(TData);
int dimensionSum = np1.Shape.Length + np2.Shape.Length;
switch (dimensionSum)
{
case 2 :
{
prod.Shape = new Shape(new int[] {1});
switch (dataType.Name)
{
case ("Double") : prod.Data = ScalarProduct1D.MuliplyScalarProd1DDouble((double[])np1Dyn,(double[])np2Dyn); break;
case ("Float") : prod.Data = ScalarProduct1D.MuliplyScalarProd1Dfloat((float[])np1Dyn,(float[])np2Dyn); break;
//case ("Complex") : prod.Data = ScalarProduct1D.Mult((float[])np1Dyn,(float[])np2Dyn); break;
//case ("Quaternion") : prod.Data = ScalarProduct1D.MuliplyScalarProd1Dfloat((float[])np1Dyn,(float[])np2Dyn); break;
}
break;
}
case 3 :
{
int[] dim0 = np1.Shape.Shapes.ToArray();
int[] dim1 = np2.Shape.Shapes.ToArray();
int iterator = np1.Shape.Shapes[1];
prod.Shape = new Shape(new int[] {dim0[0],dim1[1]});
switch (dataType.Name)
{
case ("Double"): prod.Data = MatrixMultiplication.MatrixMultiplyDoubleMatrix((double[])np1Dyn,(double[])np2Dyn,dim0,dim1); break;
case ("Float"): prod.Data = MatrixMultiplication.MatrixMultiplyfloatMatrix((float[])np1Dyn,(float[])np2Dyn,dim0,dim1); break;
case ("Complex"): prod.Data = MatrixMultiplication.MatrixMultiplyComplexMatrix((Complex[])np1Dyn,(Complex[])np2Dyn,dim0,dim1); break;
case ("Quaternion"): prod.Data = MatrixMultiplication.MatrixMultiplyQuaternionMatrix((Quaternion[])np1Dyn,(Quaternion[]) np2Dyn,dim0,dim1) ; break;
}
break;
}
case 4 :
{
int[] dim0 = np1.Shape.Shapes.ToArray();
int[] dim1 = np2.Shape.Shapes.ToArray();
int iterator = np1.Shape.Shapes[1];
prod.Shape = new Shape(new int[] {dim0[0],dim1[1]});
switch (dataType.Name)
{
case ("Double"): prod.Data = MatrixMultiplication.MatrixMultiplyDoubleMatrix((double[])np1Dyn,(double[])np2Dyn,dim0,dim1); break;
case ("Float"): prod.Data = MatrixMultiplication.MatrixMultiplyfloatMatrix((float[])np1Dyn,(float[])np2Dyn,dim0,dim1); break;
case ("Complex"): prod.Data = MatrixMultiplication.MatrixMultiplyComplexMatrix((Complex[])np1Dyn,(Complex[])np2Dyn,dim0,dim1); break;
case ("Quaternion"): prod.Data = MatrixMultiplication.MatrixMultiplyQuaternionMatrix((Quaternion[])np1Dyn,(Quaternion[]) np2Dyn,dim0,dim1) ; break;
}
break;
}
}
return ((NDArray<TData>) prod);
}
}
}