#python #numpy #scipy #time-complexity #big-o
Вопрос:
У меня есть следующий фрагмент кода:
(... some previous code ...)
vecs = np.array(vecs_list, dtype=int)
kernel = scipy.linalg.null_space(np.transpose(vecs))
rows, columns = kernel.shape
(... some ensuing code ...)
Позвольте мне прояснить некоторые вещи:
vecs_list
: представляет собой список из L списков, каждый из которых имеет размер s. Мне нравится думать об этом как о матрице L x s.- есть причина, по которой я начинаю со списка, а затем преобразую его в np.массив (это связано с характером предыдущего кода, но объект, с которого мы начинаем, действительно должен быть списком списков!).
Мой вопрос заключается в следующем: какова временная сложность этого фрагмента кода в его нынешнем виде?
На мой взгляд, ответ звучит примерно так:
vecs = np.array(vecs_list, dtype=int)
: может занять O(s**L)* времениnp.transpose(vecs)
: O(1) времяscipy.linalg.null_space(*)
: использует SVD, но я не совсем уверен, что это означает для сложности времени. Я полагаю, что я ожидал бы O(n^3) для матрицы n x n, но здесь матрица не является квадратной матрицей, и я не уверен в последствиях. Знаете ли вы, какова временная сложность этого метода? Есть ли лучшая альтернатива с точки зрения big-O?kernel.shape
: O(1) время
Заранее спасибо.
РЕДАКТИРОВАТЬ: После нескольких быстрых исследований, в которых я варьировал s и L отдельно, я получил следующие графики:
что, по-видимому, предполагает, что O(s^2 L^2). Это немного беспокоит, потому что это указывает на то, что если s=L, то O(s^4) вместо O(s^3), как можно было бы ожидать. Есть какие-нибудь мысли по этому поводу? Спасибо!
Комментарии:
1. Вам действительно нужны
kernel
или вам просто нужны его размеры?2. Проверьте это: math.stackexchange.com/questions/649587/…
3. Мне это
kernel
понадобится ниже в коде (помимо размеров, конечно).4. Я проверил эту ссылку. Две проблемы: (1) в нем обсуждаются только квадратные матрицы n на n (что не обязательно в моем случае), (2) в нем конкретно не обсуждается реализация scipy.linalg.null_space. Я хочу убедиться в сложности этого конкретного метода scipy.
5. примерно каковы размеры (l,s)?