Я должен написать System.Array
(1e09 элементов из типа Single) в двоичный файл. Я мог бы, конечно, перебрать Array с .GetValue()
и упаковать каждый сингл в 4-байтовой структуре, но это очень медленно.Как эффективно писать System.Array в двоичный файл в IronPython?
Можно ли использовать стандартный файл ввода/вывода Python в этом случае? Я пробовал somefile_write(some_systemarray)
, но в результате появляется сообщение об ошибке.
Меня интересуют только массивы 1D, однако ответ, который работает для массивов nD, будет высоко оценен.
Редактировать После прочтения первого комментария, я попытался следующий код:
from System import *
from System.IO import *
arr = Array.CreateInstance(Single, 1e8)
b = BinaryWriter(File.Open('test.bin', FileMode.Create))
for i in arr :
b.Write(i)
b.Close()
К сожалению, это занимает ок. 45 сек. Имеется BinaryWriter.Write(Byte[])
. Тем не менее, это только ускорит работу, когда можно быстро преобразовать System.Array
в Byte[]
.
Я подозреваю, что [BinaryWriter] (https://msdn.microsoft.com/en-us/library/system.io.binarywriter%28v=vs.110%29.aspx), непосредственно записи потока или посмотреть на [BinaryFormatter] (https://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binary.binaryformatter (VS.71) .aspx) может помочь. Кажется маловероятным, что операция «native python» на IronPython будет быстрее, чем что-либо, что может предложить .NET. Что будет с данными на другом конце? –
Я посмотрю на это. Я хотел бы прочитать данные из файла в моем коде на C++. –