Однако выполнение следующего примера кода :
Код: Выделить всё
from cvxopt import base, blas, lapack, cholmod, misc_solvers
from cvxopt.base import matrix, spmatrix
import numpy as np
x_arr = np.ones((10,10), dtype='float')
w_arr = np.arange(0,10, dtype='float')
x = matrix(x_arr)
w = matrix(w_arr)
for k in range(x.size[1]): # x.size[1] = col size
blas.tbmv(w, x, n = w.size[0], k = 0, ldA = 1, offsetx =
k*x.size[0])
Код: Выделить всё
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[2., 2., 2., 2., 2., 2., 2., 2., 2., 2.],
[3., 3., 3., 3., 3., 3., 3., 3., 3., 3.],
[4., 4., 4., 4., 4., 4., 4., 4., 4., 4.],
[5., 5., 5., 5., 5., 5., 5., 5., 5., 5.],
[6., 6., 6., 6., 6., 6., 6., 6., 6., 6.],
[7., 7., 7., 7., 7., 7., 7., 7., 7., 7.],
[8., 8., 8., 8., 8., 8., 8., 8., 8., 8.],
[9., 9., 9., 9., 9., 9., 9., 9., 9., 9.]])
Меня интересует следующее:
- Это реализация cvxopt, которая отличается от стандартной процедуры BLAS, или я что-то упущено?
- Если да, то есть ли умный способ добиться тех же результатов с помощью процедур BLAS? (Я полагаю, что нетрудно перебирать столбцы матрицы и умножать поэлементно БЕЗ использования интерфейса BLAS)
Подробнее здесь: https://stackoverflow.com/questions/788 ... ndard-ones