Из файла memmap-ится массив 28-байтных record-ов:
xy = np.dtype([('x', '<i2'), ('y', '<i2')])
rect = np.dtype([('bl', xy), ('y', xy)])
record = np.dtype([('a', xy), ('b', xy), ('l', rect), ('r', rect), ('c', xy)])
Чтобы применить к колонкам ‘a’ и ‘b’ сложение и умножение, нужно сделать их неструктурированными. Для одной колонки достаточно self.data['a'].view(('<i2', 2))
Но для пары колонок, даже последовательных, self.data[['a','b']].view(('<i2', 4))
выдаст ошибку, так как view() применится ко всему массиву, поэтому принимается только 14 вместо 4. self.data.view(('<i2', 14))[:, :4]
выдаст желаемый результат, но не наглядно. np.lib.recfunctions.structured_to_unstructured(self.data[['a', 'b']]).view('<i2').reshape((len(self.data), 4))
громоздко.
Какие ещё есть способы? И почему в последнем случае не работает view(('<i2', 4))
, приходится выносить reshape отдельно?