Title: Weird behavior of casting nd.ndarray on different types · Issue #2407 · pythonnet/pythonnet · GitHub
Open Graph Title: Weird behavior of casting nd.ndarray on different types · Issue #2407 · pythonnet/pythonnet
X Title: Weird behavior of casting nd.ndarray on different types · Issue #2407 · pythonnet/pythonnet
Description: Environment Pythonnet version: 3.0.3 Python version: 3.12.4 Operating System: Windows 11 23H2 .NET Runtime: net8.0 numpy Version: 2.0.0 Details Describe what you were trying to get done. I am currently migrating from an older undefined p...
Open Graph Description: Environment Pythonnet version: 3.0.3 Python version: 3.12.4 Operating System: Windows 11 23H2 .NET Runtime: net8.0 numpy Version: 2.0.0 Details Describe what you were trying to get done. I am curre...
X Description: Environment Pythonnet version: 3.0.3 Python version: 3.12.4 Operating System: Windows 11 23H2 .NET Runtime: net8.0 numpy Version: 2.0.0 Details Describe what you were trying to get done. I am curre...
Opengraph URL: https://github.com/pythonnet/pythonnet/issues/2407
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Weird behavior of casting nd.ndarray on different types","articleBody":"### Environment\r\n\r\n- Pythonnet version: 3.0.3\r\n- Python version: 3.12.4\r\n- Operating System: Windows 11 23H2\r\n- .NET Runtime: net8.0\r\n- numpy Version: 2.0.0\r\n\r\n### Details\r\n\r\n- Describe what you were trying to get done.\r\n\r\n I am currently migrating from an older undefined pythonnet Version to 3.0.3 with an corresponding upgrade of python from 3.7.9 to 3.12.4.\r\n\r\n We had some C# logic in place which executed python code and took the result of Tuple[nd.ndarray(dtype=int), nd.ndarray(dtype=float)] and converted it from dynamic to concrete types.\r\n\r\nI am experiencing issues while converting the nd.ndarray(dtype=int) via (long[])result[0]\r\n\r\n\u003e ---- System.Exception : Cannot convert to System.Int64 array\r\n\u003e -------- Microsoft.CSharp.RuntimeBinder.RuntimeBinderException : Cannot convert type 'Python.Runtime.PyObject' to 'long[]'\r\n\r\n\r\nThe nd.ndarray(dtype=float) via (double[])result[1] works as a charme.\r\nSame as when I both return as dtype=float and convert them to double.\r\n\r\nMy current workaround is iterating over the nd.ndarray(dtype=int) with the size of the result array by calling ToArrayByIteration\u003clong\u003e()\r\n\r\nAm I missing something?\r\n\r\n- What commands did you run to trigger this issue? If you can provide a\r\n [Minimal, Complete, and Verifiable example](http://stackoverflow.com/help/mcve)\r\n this will help us understand the issue.\r\n\r\nProblematic here is converting \"indices\" from dtype=int to long in C#. The datatype of the result in C# in Debug view seems to be Int64.\r\n```python\r\n @staticmethod\r\n def method(rate: int, data: np.ndarray) -\u003e Tuple[np.ndarray, np.ndarray]:\r\n ds = int(rate)\r\n indices = np.arange(len(data), dtype=int)\r\n result_data = np.array(data, dtype=float)\r\n\r\n n = len(indices )\r\n indices = indices [:n * ds:ds]\r\n result_data = result_data [:n * ds].reshape(n, ds).mean(axis=1)\r\n\r\n return indices , result_data \r\n```\r\n\r\nReturning dtype=float is not intended but works with the same conversion to double.\r\n```python\r\n @staticmethod\r\n def method(rate: int, data: np.ndarray) -\u003e Tuple[np.ndarray, np.ndarray]:\r\n ds = int(rate)\r\n indices = np.arange(len(data), dtype=float)\r\n result_data = np.array(data, dtype=float)\r\n\r\n n = len(indices )\r\n indices = indices [:n * ds:ds]\r\n result_data = result_data [:n * ds].reshape(n, ds).mean(axis=1)\r\n\r\n return indices , result_data \r\n```\r\n\r\nI left out initialising pythonengine and loading the module in this case.\r\n```csharp\r\npublic class Wrapper \r\n{\r\n public (long[] x, double[] y) ExecutePythonMethod(\r\n int rate,\r\n List\u003cdouble\u003e data)\r\n {\r\n using var _ = Py.GIL();\r\n var result = _module.class.method(rate, data);\r\n\r\n var x = PythonDataConverter.ToArrayByIteration\u003clong\u003e(result[0]);\r\n var y = PythonDataConverter.ToArray\u003cdouble\u003e(result[1]);\r\n return (x, y);\r\n }\r\n}\r\n\r\npublic static class PythonDataConverter\r\n{\r\n public static T[] ToArrayByIteration\u003cT\u003e(dynamic arrayFromPython)\r\n {\r\n var size = (long)arrayFromPython.size;\r\n\r\n var array = new T[size];\r\n\r\n for (var i = 0; i \u003c size; i++)\r\n {\r\n array[i] = (T)arrayFromPython[i];\r\n }\r\n\r\n return array;\r\n }\r\n\r\n public static T[] ToArray\u003cT\u003e(dynamic arrayFromPython)\r\n {\r\n return (T[])arrayFromPython;\r\n }\r\n}\r\n\r\n```","author":{"url":"https://github.com/Trippley","@type":"Person","name":"Trippley"},"datePublished":"2024-07-01T13:22:57.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/2407/pythonnet/issues/2407"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:bdb51b0d-93fc-8f0c-7832-e46de8ce6f68 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8826:1E8FCD:A7D395:EC636E:697253E1 |
| html-safe-nonce | ee12303937ecd9f8a6007651e3d01ebad93e68c8b267bb772d1c23e9321f799c |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4ODI2OjFFOEZDRDpBN0QzOTU6RUM2MzZFOjY5NzI1M0UxIiwidmlzaXRvcl9pZCI6IjQ2MDczMjEyNDI1MDIwNTg5NzciLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | b18918149b4664c340197bcf2a51a1ab9af0ed660a602fc0208d8144ee865c27 |
| hovercard-subject-tag | issue:2383848022 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/pythonnet/pythonnet/2407/issue_layout |
| twitter:image | https://opengraph.githubassets.com/ee5331619818b314155ab19f1549334166cb3f1606ec6419736b2a5921e4b3c6/pythonnet/pythonnet/issues/2407 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/ee5331619818b314155ab19f1549334166cb3f1606ec6419736b2a5921e4b3c6/pythonnet/pythonnet/issues/2407 |
| og:image:alt | Environment Pythonnet version: 3.0.3 Python version: 3.12.4 Operating System: Windows 11 23H2 .NET Runtime: net8.0 numpy Version: 2.0.0 Details Describe what you were trying to get done. I am curre... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | Trippley |
| hostname | github.com |
| expected-hostname | github.com |
| None | f6d9b08324bb62b2cf170b9e435da2bdc7efa5aa93e7ca70ee3162552c05329b |
| turbo-cache-control | no-preview |
| go-import | github.com/pythonnet/pythonnet git https://github.com/pythonnet/pythonnet.git |
| octolytics-dimension-user_id | 6050430 |
| octolytics-dimension-user_login | pythonnet |
| octolytics-dimension-repository_id | 14748123 |
| octolytics-dimension-repository_nwo | pythonnet/pythonnet |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 14748123 |
| octolytics-dimension-repository_network_root_nwo | pythonnet/pythonnet |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 169d2b5c72bff9cc676084f0ac7f8ea888f15f54 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width