У меня есть структурированный массив, который загружается из двоичного файла.
In [85]: dx = np.dtype([('op', '<u8'), ('me', '<u8'), ('gw', '<u8'), ('md', '<u8'), ('tt', '<u8'), ('bb', '<u8'), ('en', '<u8'), ('ab', '<u8'), ('st', 'u1')])
In [86]: s = np.fromfile("somefile.bin", dtype=dx)
In [87]: s
Out[87]:
array([(1574647200000000000, 1574647200000000000, 1574647200000000000, 1574647200000000000, 1574647200000000000, 1574647200000000000, 19374, 9223372036854775808, 0)],
dtype=[('op', '<u8'), ('me', '<u8'), ('gw', '<u8'), ('md', '<u8'), ('tt', '<u8'), ('bb', '<u8'), ('en', '<u8'), ('ab', '<u8'), ('st', 'u1')])
Теперь мне нужно удалить некоторые из этих столбцов и сохранить данные в двоичном формате, который можно загрузить из C .
В numpy v1.13.3 работает следующий код:
In [88]: x = s[['op', 'st']]
In [89]: x
Out[89]:
array([(1574647200000000000, 0)],
dtype={'names':['op','st'], 'formats':['<u8','u1'], 'offsets':[0,64], 'itemsize':65})
In [90]: x.tofile("updated.bin")
Значение, если я сейчас открою updated.bin в шестнадцатеричном редакторе или код C, он имеет только 8-байтовые и 1-байтовые значения uint.
Теперь переключитесь на numpy v1.17.1 или 1.18.x, этот код не работает, и двоичный файл содержит все данные из первого файл! похоже, что когда я сделал x = s[...]
x, он все еще был представлением, и когда записывал x в файл, он записал все данные.
Я пробовал np.delete()
и np.copy()
и ndarray.copy()
без удачи.
Кто-нибудь может мне помочь?