Skip to content

Commit c498027

Browse files
committed
update managed ops
1 parent dac8e7f commit c498027

1 file changed

Lines changed: 43 additions & 12 deletions

File tree

SVMClassifier/ManagedOps.cs

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,26 @@ public static void Copy2D(ManagedArray dst, ManagedArray src, int minx, int miny
2929
}
3030
}
3131

32-
// Copy 2D[index_list][y]
33-
public static void Copy2DX(ManagedArray dst, ManagedArray src, ManagedIntList index_list, int minx)
32+
// Copy 2D[index_list[minx + x]][miny + y]
33+
public static void Copy2D(ManagedArray dst, ManagedArray src, int minx, int miny, ManagedIntList index_list)
3434
{
35-
for (var y = 0; y < dst.y; y++)
35+
if (miny >= 0 & miny < src.y)
3636
{
37-
var dstoffset = y * dst.x;
38-
var srcoffset = y * src.x;
37+
for (var y = 0; y < dst.y; y++)
38+
{
39+
var sx = (miny + y) * src.x;
40+
var dx = y * dst.x;
3941

40-
var xx = index_list[minx];
42+
for (var x = 0; x < dst.x; x++)
43+
{
44+
var xx = index_list[minx + x];
45+
46+
var srcoffset = sx + xx;
47+
var dstoffset = dx + x;
4148

42-
MemCopy(dst, dstoffset, src, srcoffset + xx, dst.x);
49+
dst[dstoffset] = src[srcoffset];
50+
}
51+
}
4352
}
4453
}
4554

@@ -79,19 +88,22 @@ public static void Copy3D(ManagedArray dst, ManagedArray src, int minx, int miny
7988
}
8089
}
8190

82-
// Copy 3D[x][y][index_list]
83-
public static void Copy3DZ(ManagedArray dst, ManagedArray src, ManagedIntList index_list, int minz)
91+
// Copy 3D[minx + x][miny + y][index_list[minz + z]]
92+
public static void Copy3D(ManagedArray dst, ManagedArray src, int minx, int miny, int minz, ManagedIntList index_list)
8493
{
85-
if (minz < src.z)
94+
if (minx >= 0 & minx < src.x & miny >= 0 & miny < src.y & minz >= 0 & minz < src.z)
8695
{
8796
for (var z = 0; z < dst.z; z++)
8897
{
8998
var zz = index_list[minz + z];
9099

100+
var offsets = zz * src.y + miny;
101+
var offsetd = z * dst.y;
102+
91103
for (var y = 0; y < dst.y; y++)
92104
{
93-
var dstoffset = (z * dst.y + y) * dst.x;
94-
var srcoffset = (zz * src.y + y) * src.x;
105+
var dstoffset = (offsetd + y) * dst.x;
106+
var srcoffset = (offsets + y) * src.x + minx;
95107

96108
MemCopy(dst, dstoffset, src, srcoffset, dst.x);
97109
}
@@ -262,6 +274,25 @@ public static void Copy2D4DIJ(ManagedArray dst, ManagedArray src, int i, int j)
262274
}
263275
}
264276

277+
// Fisher–Yates shuffle algorithm
278+
public static void Shuffle(ManagedIntList index_list)
279+
{
280+
System.Random random = new System.Random(System.Guid.NewGuid().GetHashCode());
281+
282+
int n = index_list.Length();
283+
284+
for (int i = n - 1; i > 1; i--)
285+
{
286+
int rnd = random.Next(i + 1);
287+
288+
var value = index_list[rnd];
289+
290+
index_list[rnd] = index_list[i];
291+
292+
index_list[i] = value;
293+
}
294+
}
295+
265296
public static void Free(params ManagedArray[] trash)
266297
{
267298
foreach (var item in trash)

0 commit comments

Comments
 (0)