как конвертировать. NET double в массив python с плавающей запятой без l oop? - PullRequest
0 голосов
/ 31 января 2020

Я заранее извиняюсь за свое невежество, о чем ничего не знаю. NET и столкнулся с этой одной конкретной проблемой, которая сильно замедляет мой код, и постараюсь объяснить ее.

Я использую пакет clr для взаимодействия с dll. NET, который позволяет мне взаимодействовать с проприетарным типом файла. Для справки, это MIKE SDK: ссылка

Я использую указанную c dll в пакете SDK для извлечения координат из сетки.

мой код выглядит так (после открытия файла):

dfs.ReadStaticItem(static_items_index['X-coord']).Data

это возвращает:

<System.Double[] at 0x2b9b7aa81c8>

Я могу получить количество координат, выполнив:

dfs.ReadStaticItem(static_items_index['X-coord']).ElementCount #31722

и я могу получить полный набор координат, выполнив команду al oop:

nnodes = dfs.ReadStaticItem(static_items_index['X-coord']).ElementCount
x_coords = np.array([dfs.ReadStaticItem(static_items_index['X-coord']).Data[i] \
                     for i in range(nnodes)])

. Это дает мне ожидаемый результат:

array([223656.14339717, 223650.86894098, 223653.54388233, ...,
       224562.53220159, 224564.77450669, 224563.56442112])

Однако, это ужасно медленно, и Я должен сделать это для точек xy и z (и некоторых других вещей).

Должен быть способ извлечь все значения сразу или без al oop?

для запись, если я делаю (если dfs - мой файловый объект, а static_items_index просто содержит числа, соответствующие индексу элемента stati c, который я пытаюсь прочитать):

dir(dfs.ReadStaticItem(static_items_index['X-coord']))

возвращает :

['AxisConversionType',
 'AxisConversionUnit',
 'Bytes',
 'ConversionType',
 'ConversionUnit',
 'Data',
 'DataType',
 'ElementCount',
 'Equals',
 'Finalize',
 'GetHashCode',
 'GetType',
 'ItemNumber',
 'MemberwiseClone',
 'Name',
 'OrientationAlpha',
 'OrientationPhi',
 'OrientationTheta',
 'Overloads',
 'Quantity',
 'ReferenceCoordinateX',
 'ReferenceCoordinateY',
 'ReferenceCoordinateZ',
 'ReferenceEquals',
 'SetAxisUnitConversion',
 'SetOrientation',
 'SetReferenceCoordinates',
 'SetUnitConversion',
 'SpatialAxis',
 'SpatialAxisUpdated',
 'ToString',
 'UsedBytes',
 'UsedElementCount',
 '__call__',
 '__class__',
 '__delattr__',
 '__delitem__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__overloads__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__setitem__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '_dfsFile',
 '_eumQuantity',
 '_itemDataType',
 '_itemNumber',
 '_itemPointer',
 '_name',
 'get_AxisConversionType',
 'get_AxisConversionUnit',
 'get_Bytes',
 'get_ConversionType',
 'get_ConversionUnit',
 'get_Data',
 'get_DataType',
 'get_ElementCount',
 'get_ItemNumber',
 'get_Name',
 'get_OrientationAlpha',
 'get_OrientationPhi',
 'get_OrientationTheta',
 'get_Quantity',
 'get_ReferenceCoordinateX',
 'get_ReferenceCoordinateY',
 'get_ReferenceCoordinateZ',
 'get_SpatialAxis',
 'get_UsedBytes',
 'get_UsedElementCount',
 'set_Name',
 'set_Quantity']

И .get_Data(), и .Data возвращают то же самое, что упомянуто выше.

Есть ли способ сделать это без AL oop? или как-то ускорить его?

Если у кого-то есть идеи, которые были бы хороши, если кто-то захочет скачать SDK и попробовать его самостоятельно, я могу дать им полный код и образец файла, но для воспроизведения моего текущая ошибка не так проста, как копирование / вставка некоторого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...