Skip to content

Commit 5a135d9

Browse files
committed
Added np.log2, np.log10, np.log1p
1 parent c97a558 commit 5a135d9

File tree

5 files changed

+425
-0
lines changed

5 files changed

+425
-0
lines changed
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
using System;
2+
using DecimalMath;
3+
using NumSharp.Utilities;
4+
using System.Threading.Tasks;
5+
6+
namespace NumSharp.Backends
7+
{
8+
public partial class DefaultEngine
9+
{
10+
public override NDArray Log10(in NDArray nd, Type dtype) => Log10(nd, dtype?.GetTypeCode());
11+
12+
public override NDArray Log10(in NDArray nd, NPTypeCode? typeCode = null)
13+
{
14+
if (nd.size == 0)
15+
return nd.Clone();
16+
17+
var @out = Cast(nd, ResolveUnaryReturnType(nd, typeCode), copy: true);
18+
var len = @out.size;
19+
20+
unsafe
21+
{
22+
switch (@out.GetTypeCode)
23+
{
24+
#if _REGEN
25+
%foreach except(supported_numericals, "Decimal"),except(supported_numericals_lowercase, "decimal")%
26+
case NPTypeCode.#1:
27+
{
28+
var out_addr = (#2*)@out.Address;
29+
Parallel.For(0, len, i => *(out_addr + i) = Converts.To#1(Math.Log10(*(out_addr + i))));
30+
return @out;
31+
}
32+
%
33+
case NPTypeCode.Decimal:
34+
{
35+
var out_addr = (decimal*)@out.Address;
36+
Parallel.For(0, len, i => *(out_addr + i) = (DecimalEx.Log10(*(out_addr + i))));
37+
return @out;
38+
}
39+
default:
40+
throw new NotSupportedException();
41+
#else
42+
case NPTypeCode.Byte:
43+
{
44+
var out_addr = (byte*)@out.Address;
45+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToByte(Math.Log10(*(out_addr + i))));
46+
return @out;
47+
}
48+
case NPTypeCode.Int16:
49+
{
50+
var out_addr = (short*)@out.Address;
51+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt16(Math.Log10(*(out_addr + i))));
52+
return @out;
53+
}
54+
case NPTypeCode.UInt16:
55+
{
56+
var out_addr = (ushort*)@out.Address;
57+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt16(Math.Log10(*(out_addr + i))));
58+
return @out;
59+
}
60+
case NPTypeCode.Int32:
61+
{
62+
var out_addr = (int*)@out.Address;
63+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt32(Math.Log10(*(out_addr + i))));
64+
return @out;
65+
}
66+
case NPTypeCode.UInt32:
67+
{
68+
var out_addr = (uint*)@out.Address;
69+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt32(Math.Log10(*(out_addr + i))));
70+
return @out;
71+
}
72+
case NPTypeCode.Int64:
73+
{
74+
var out_addr = (long*)@out.Address;
75+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt64(Math.Log10(*(out_addr + i))));
76+
return @out;
77+
}
78+
case NPTypeCode.UInt64:
79+
{
80+
var out_addr = (ulong*)@out.Address;
81+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt64(Math.Log10(*(out_addr + i))));
82+
return @out;
83+
}
84+
case NPTypeCode.Char:
85+
{
86+
var out_addr = (char*)@out.Address;
87+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToChar(Math.Log10(*(out_addr + i))));
88+
return @out;
89+
}
90+
case NPTypeCode.Double:
91+
{
92+
var out_addr = (double*)@out.Address;
93+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToDouble(Math.Log10(*(out_addr + i))));
94+
return @out;
95+
}
96+
case NPTypeCode.Single:
97+
{
98+
var out_addr = (float*)@out.Address;
99+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToSingle(Math.Log10(*(out_addr + i))));
100+
return @out;
101+
}
102+
case NPTypeCode.Decimal:
103+
{
104+
var out_addr = (decimal*)@out.Address;
105+
Parallel.For(0, len, i => *(out_addr + i) = (DecimalEx.Log10(*(out_addr + i))));
106+
return @out;
107+
}
108+
default:
109+
throw new NotSupportedException();
110+
#endif
111+
}
112+
}
113+
}
114+
}
115+
}
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
using System;
2+
using DecimalMath;
3+
using NumSharp.Utilities;
4+
using System.Threading.Tasks;
5+
6+
namespace NumSharp.Backends
7+
{
8+
public partial class DefaultEngine
9+
{
10+
public override NDArray Log1p(in NDArray nd, Type dtype) => Log10(nd, dtype?.GetTypeCode());
11+
12+
public override NDArray Log1p(in NDArray nd, NPTypeCode? typeCode = null)
13+
{
14+
if (nd.size == 0)
15+
return nd.Clone();
16+
17+
var @out = Cast(nd, ResolveUnaryReturnType(nd, typeCode), copy: true);
18+
var len = @out.size;
19+
20+
unsafe
21+
{
22+
switch (@out.GetTypeCode)
23+
{
24+
#if _REGEN
25+
%foreach except(supported_numericals, "Decimal"),except(supported_numericals_lowercase, "decimal"), except(supported_numericals_onevales, "1m")%
26+
case NPTypeCode.#1:
27+
{
28+
var out_addr = (#2*)@out.Address;
29+
Parallel.For(0, len, i => *(out_addr + i) = Converts.To#1(Math.Log10(*(out_addr + i) + #3)));
30+
return @out;
31+
}
32+
%
33+
case NPTypeCode.Decimal:
34+
{
35+
var out_addr = (decimal*)@out.Address;
36+
Parallel.For(0, len, i => *(out_addr + i) = (DecimalEx.Log10(*(out_addr + i) + 1m)));
37+
return @out;
38+
}
39+
default:
40+
throw new NotSupportedException();
41+
#else
42+
case NPTypeCode.Byte:
43+
{
44+
var out_addr = (byte*)@out.Address;
45+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToByte(Math.Log10(*(out_addr + i) + 1)));
46+
return @out;
47+
}
48+
case NPTypeCode.Int16:
49+
{
50+
var out_addr = (short*)@out.Address;
51+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt16(Math.Log10(*(out_addr + i) + 1)));
52+
return @out;
53+
}
54+
case NPTypeCode.UInt16:
55+
{
56+
var out_addr = (ushort*)@out.Address;
57+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt16(Math.Log10(*(out_addr + i) + 1)));
58+
return @out;
59+
}
60+
case NPTypeCode.Int32:
61+
{
62+
var out_addr = (int*)@out.Address;
63+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt32(Math.Log10(*(out_addr + i) + 1)));
64+
return @out;
65+
}
66+
case NPTypeCode.UInt32:
67+
{
68+
var out_addr = (uint*)@out.Address;
69+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt32(Math.Log10(*(out_addr + i) + 1u)));
70+
return @out;
71+
}
72+
case NPTypeCode.Int64:
73+
{
74+
var out_addr = (long*)@out.Address;
75+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt64(Math.Log10(*(out_addr + i) + 1L)));
76+
return @out;
77+
}
78+
case NPTypeCode.UInt64:
79+
{
80+
var out_addr = (ulong*)@out.Address;
81+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt64(Math.Log10(*(out_addr + i) + 1UL)));
82+
return @out;
83+
}
84+
case NPTypeCode.Char:
85+
{
86+
var out_addr = (char*)@out.Address;
87+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToChar(Math.Log10(*(out_addr + i) + 1)));
88+
return @out;
89+
}
90+
case NPTypeCode.Double:
91+
{
92+
var out_addr = (double*)@out.Address;
93+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToDouble(Math.Log10(*(out_addr + i) + 1d)));
94+
return @out;
95+
}
96+
case NPTypeCode.Single:
97+
{
98+
var out_addr = (float*)@out.Address;
99+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToSingle(Math.Log10(*(out_addr + i) + 1f)));
100+
return @out;
101+
}
102+
case NPTypeCode.Decimal:
103+
{
104+
var out_addr = (decimal*)@out.Address;
105+
Parallel.For(0, len, i => *(out_addr + i) = (DecimalEx.Log10(*(out_addr + i) + 1m)));
106+
return @out;
107+
}
108+
default:
109+
throw new NotSupportedException();
110+
#endif
111+
}
112+
}
113+
}
114+
}
115+
}
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
using System;
2+
using DecimalMath;
3+
using NumSharp.Utilities;
4+
using System.Threading.Tasks;
5+
6+
namespace NumSharp.Backends
7+
{
8+
public partial class DefaultEngine
9+
{
10+
public override NDArray Log2(in NDArray nd, Type dtype) => Log2(nd, dtype?.GetTypeCode());
11+
12+
public override NDArray Log2(in NDArray nd, NPTypeCode? typeCode = null)
13+
{
14+
if (nd.size == 0)
15+
return nd.Clone();
16+
17+
var @out = Cast(nd, ResolveUnaryReturnType(nd, typeCode), copy: true);
18+
var len = @out.size;
19+
20+
unsafe
21+
{
22+
switch (@out.GetTypeCode)
23+
{
24+
#if _REGEN
25+
%foreach except(supported_numericals, "Decimal"),except(supported_numericals_lowercase, "decimal")%
26+
case NPTypeCode.#1:
27+
{
28+
var out_addr = (#2*)@out.Address;
29+
Parallel.For(0, len, i => *(out_addr + i) = Converts.To#1(Math.Log(*(out_addr + i), 2)));
30+
return @out;
31+
}
32+
%
33+
case NPTypeCode.Decimal:
34+
{
35+
var out_addr = (decimal*)@out.Address;
36+
Parallel.For(0, len, i => *(out_addr + i) = (DecimalEx.Log(*(out_addr + i), 2)));
37+
return @out;
38+
}
39+
default:
40+
throw new NotSupportedException();
41+
#else
42+
case NPTypeCode.Byte:
43+
{
44+
var out_addr = (byte*)@out.Address;
45+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToByte(Math.Log(*(out_addr + i), 2)));
46+
return @out;
47+
}
48+
case NPTypeCode.Int16:
49+
{
50+
var out_addr = (short*)@out.Address;
51+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt16(Math.Log(*(out_addr + i), 2)));
52+
return @out;
53+
}
54+
case NPTypeCode.UInt16:
55+
{
56+
var out_addr = (ushort*)@out.Address;
57+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt16(Math.Log(*(out_addr + i), 2)));
58+
return @out;
59+
}
60+
case NPTypeCode.Int32:
61+
{
62+
var out_addr = (int*)@out.Address;
63+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt32(Math.Log(*(out_addr + i), 2)));
64+
return @out;
65+
}
66+
case NPTypeCode.UInt32:
67+
{
68+
var out_addr = (uint*)@out.Address;
69+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt32(Math.Log(*(out_addr + i), 2)));
70+
return @out;
71+
}
72+
case NPTypeCode.Int64:
73+
{
74+
var out_addr = (long*)@out.Address;
75+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToInt64(Math.Log(*(out_addr + i), 2)));
76+
return @out;
77+
}
78+
case NPTypeCode.UInt64:
79+
{
80+
var out_addr = (ulong*)@out.Address;
81+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToUInt64(Math.Log(*(out_addr + i), 2)));
82+
return @out;
83+
}
84+
case NPTypeCode.Char:
85+
{
86+
var out_addr = (char*)@out.Address;
87+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToChar(Math.Log(*(out_addr + i), 2)));
88+
return @out;
89+
}
90+
case NPTypeCode.Double:
91+
{
92+
var out_addr = (double*)@out.Address;
93+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToDouble(Math.Log(*(out_addr + i), 2)));
94+
return @out;
95+
}
96+
case NPTypeCode.Single:
97+
{
98+
var out_addr = (float*)@out.Address;
99+
Parallel.For(0, len, i => *(out_addr + i) = Converts.ToSingle(Math.Log(*(out_addr + i), 2)));
100+
return @out;
101+
}
102+
case NPTypeCode.Decimal:
103+
{
104+
var out_addr = (decimal*)@out.Address;
105+
Parallel.For(0, len, i => *(out_addr + i) = (DecimalEx.Log(*(out_addr + i), 2)));
106+
return @out;
107+
}
108+
default:
109+
throw new NotSupportedException();
110+
#endif
111+
}
112+
}
113+
}
114+
}
115+
}

src/NumSharp.Core/Backends/TensorEngine.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ public abstract class TensorEngine
5454
public abstract NDArray Sqrt(in NDArray nd, NPTypeCode? typeCode = null);
5555
public abstract NDArray Log(in NDArray nd, Type dtype);
5656
public abstract NDArray Log(in NDArray nd, NPTypeCode? typeCode = null);
57+
public abstract NDArray Log2(in NDArray nd, Type dtype);
58+
public abstract NDArray Log2(in NDArray nd, NPTypeCode? typeCode = null);
59+
public abstract NDArray Log10(in NDArray nd, Type dtype);
60+
public abstract NDArray Log10(in NDArray nd, NPTypeCode? typeCode = null);
61+
public abstract NDArray Log1p(in NDArray nd, Type dtype);
62+
public abstract NDArray Log1p(in NDArray nd, NPTypeCode? typeCode = null);
5763
public abstract NDArray Exp(in NDArray nd, Type dtype);
5864
public abstract NDArray Exp(in NDArray nd, NPTypeCode? typeCode = null);
5965
public abstract NDArray Tan(in NDArray nd, Type dtype);

0 commit comments

Comments
 (0)