LINUX.ORG.RU

Как покрасивее взять колонки в структурированном массиве numpy?

 ,


0

1

Из файла 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 отдельно?

★★★★★

Ответ на: комментарий от ei-grad

Что именно ты пытаешься применить?

Линейное преобразование.

Почему нельзя просто взять self.data[‘a’]

Чтобы не писать несколько одинаковых строк (self.data[‘a’] * self.k + self.b).astype(...).reshape(...)

question4 ★★★★★
() автор топика
Ответ на: комментарий от ei-grad

np.recarray используешь?

data = np.memmap(..., dtype=record)

или

data_all = np.memmap(..., dtype='u1')
data = data_all[from:to].view(record)

Принципиальная разница c recarray есть?

question4 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.