#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))]