Вычисление матрицы в numpy с помощью вызова функции

#python #python-3.x #numpy

#python #python-3.x #numpy

Вопрос:

У меня есть функция, которая присваивает объекту вектор объектов фиксированной длины n (1d массив numpy): feature_vector(obj) .

Я также получил функцию, которая вычисляет скалярное произведение векторов признаков из 2 объектов (целая функция только для скалярного произведения не нужна … я знаю. Но я думаю, что в будущем это станет сложнее, чем скалярное произведение):

 def kernel(obj1, obj2):
    return return np.dot(feature_vector(obj1), feature_vector(obj2))
  

Теперь я получаю список m этих объектов и хочу вычислить матрицу для соответствующих ядер:

 def computematrix(objlist):
    m = np.zeros((len(objlist), len(objlist)))
    for i in range(len(objlist)):
        for j in range(len(objlist)):
            m[i][j] = kernel(objlist[i], objlist[j])
    return m
  

Есть ли более эффективный / простой pythonic / более простой способ сделать это?

Ответ №1:

Вы могли бы сделать все это в одной строке:

 m = [[(kernel(objlist[i], objlist[j]) for j in range(len(objlist))] for i in range(len(objlist))]