Любой способ предотвратить изменения содержимого подкласса ndarray? - PullRequest
0 голосов
/ 22 октября 2019

Я создаю различные классы для вычислительной геометрии, которые все подкласс numpy.ndarray. Класс DataCloud, который типичен для этих классов, имеет свойства Python (например, convx_hull, delaunay_trangulation), которые требуют много времени и расточительны для расчета более одного раза. Я хочу сделать расчеты один раз и только один раз. Кроме того, как раз вовремя, потому что для данного экземпляра мне может вообще не понадобиться данное свойство. Это достаточно легко установить, установив self .__vevex_hull = None в конструкторе и, если / когда вызывается свойство convx_hull, выполнив необходимые вычисления, установив self .__vexx_hull и вернув вычисленное значение.

Проблема в том, что как только любое из этих сложных свойств вызывается, любые изменения в содержимом, внесенные вне моего подкласса различными различными numpy (в отличие от подкласса DataCloud), аннулируют все вычисленные свойства, и я не будузнать об этом. Например, предположим, что внешний код просто делает это с экземпляром: datacloud [3,8] = 5. Так есть ли способ (1) сделать базовый класс ndarray доступным только для чтения после вычисления любого из этих свойств или (2) установил ли ndarray какой-то индикатор того, что в его содержимом произошли изменения (что для моих целей делает его грязным), чтобы затем вызов любого из сложных свойств потребовал пересчета?

1 Ответ

0 голосов
/ 22 октября 2019

Похоже, ответ: np.ndarray.setflags(write=False)

...