Если я хочу взаимодействовать с кодом cython на numpy ndarray, то я хочу, чтобы массив C_CONTIGUOUS упростил жизнь.numpy внешнее взаимодействие: когда требуется OWNDATA
При каких обстоятельствах, однако, мне необходимо обеспечить установку OWNDATA?
Если я хочу взаимодействовать с кодом cython на numpy ndarray, то я хочу, чтобы массив C_CONTIGUOUS упростил жизнь.numpy внешнее взаимодействие: когда требуется OWNDATA
При каких обстоятельствах, однако, мне необходимо обеспечить установку OWNDATA?
NPY_OWNDATA лучше всего использовать, когда блок памяти выделяется в коде C и передается в код Cython (скорее всего, через обратный вызов). В этом случае, если вы хотите, чтобы Numpy начинал подсчет ссылок и автоматически освобождал блок памяти, когда счетчик ссылок обращается в ноль, вы добавляете флаг NPY_OWNDATA.
Если вы используете кольцевой буфер или другую конструкцию в коде C, где код Python будет временно использовать память, пока он выполняет его вычисления, а затем будет уведомлять код C, который он может повторно использовать блок памяти, то вы определенно не хотите NPY_OWNDATA, потому что Numpy освободит память, которую ожидает код C еще.
Там хорошее обсуждение этого здесь:
http://blog.enthought.com/python/numpy-arrays-with-pre-allocated-memory/#.VxpQTjArKUk