Skip to content

Commit 5d12968

Browse files
committed
np.array(string): Performance Optimization
1 parent 8ff7c8e commit 5d12968

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/NumSharp.Core/Creation/np.array.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,20 @@ public static NDArray array(string chars)
6262
if (chars.Length==0)
6363
return new NDArray(NPTypeCode.Char);
6464
return new NDArray(ArraySlice.FromArray(chars.ToArray()), Shape.Vector(chars.Length));
65+
66+
unsafe
67+
{
68+
var ret = new ArraySlice<char>(new UnmanagedMemoryBlock<char>(chars.Length));
69+
fixed (char* strChars = chars)
70+
{
71+
var src = strChars;
72+
var dst = ret.Address;
73+
var len = sizeof(char) * chars.Length;
74+
Buffer.MemoryCopy(src, dst, len, len);
75+
}
76+
77+
return new NDArray(ret);
78+
}
6579
}
6680

6781
public static NDArray array<T>(T[][] data)

test/NumSharp.UnitTest/Backends/Unmanaged/StringApiTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ public class StringApiTests
1111
{
1212
private static string hello = "hello";
1313

14+
[TestMethod]
15+
public void np_array_string()
16+
{
17+
var str = NDArray.FromString(hello);
18+
str.Should().BeOfType<char>().And.BeShaped(5).And.BeOfValues('h', 'e', 'l', 'l', 'o');
19+
}
20+
1421
[TestMethod]
1522
public void FromString()
1623
{

0 commit comments

Comments
 (0)