Как использовать типы буфера numpy в атрибуте уровня класса в cython? [Дубликат]

Вот довольно простое сообщение, которое использует метод split из accessand pandas str, а затем использует NumPy для выравнивания каждой строки в один массив.

Соответствующие значения извлекаются путем повторения нерасширенный столбец правильное количество раз с np.repeat.

var1 = df.var1.str.split(',', expand=True).values.ravel()
var2 = np.repeat(df.var2.values, len(var1) / len(df))

pd.DataFrame({'var1': var1,
              'var2': var2})

  var1  var2
0    a     1
1    b     1
2    c     1
3    d     2
4    e     2
5    f     2
20
задан Brendan OConnor 10 January 2012 в 20:09
поделиться

2 ответа

Есть возможность работать с фрагментами памяти или массивами cython http://docs.cython.org/src/userguide/memoryviews.html

import numpy as np
cimport numpy as np

  cdef class Model:

    cdef int [:] A

    def sum(self):

        for 0 <= i < N:
            s += self.A[i]
        return s

    def __init__(self):
        self.A = np.arange(1000)
13
ответ дан fco 27 August 2018 в 05:59
поделиться

Решение, которое вы используете в настоящее время, я использую, т. е. создаю локальную копию функции. Это не изящно, но я не думаю, что вы нанесли огромный удар производительности (или, по крайней мере, в моем случае, я много работаю над этим методом, поэтому он не делает заметной разницы). Я также создал C-массив в методе __cinit__, а затем заполнил его данными в __init__ (убедитесь, что вы правильно используете __dealloc__ для очистки). Вы теряете некоторые функции массива numpy, но вы все равно можете использовать его, как и для c-массива.

Вы также можете проверить обсуждение в этом более старом письме в списке cython:

http://codespeak.net/pipermail/cython-dev/2009-April/005214.html

6
ответ дан JoshAdel 27 August 2018 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: