linalg.dot : also accepts 2 vectors of same dimension
@@ -146,6 +146,19 @@ static mp_obj_t linalg_dot(mp_obj_t _m1, mp_obj_t _m2) {
}
ndarray_obj_t *m1 = MP_OBJ_TO_PTR(_m1);
ndarray_obj_t *m2 = MP_OBJ_TO_PTR(_m2);
+
+ if ((m1->m == 1) && (m2->m == 1)) {
+ // 2 vectors
+ if (m1->array->len != m2->array->len) {
+ mp_raise_ValueError(translate("vectors must have same dimension"));
+ }
+ mp_float_t dot = 0.0;
+ for (size_t pos=0; pos < m1->array->len; pos++) {
+ dot += ndarray_get_float_value(m1->array->items, m1->array->typecode, pos)*ndarray_get_float_value(m2->array->items, m2->array->typecode, pos);
+ }
+ return mp_obj_new_float(dot);
+ } else {
+ // 2 matrices
if(m1->n != m2->m) {
mp_raise_ValueError(translate("matrix dimensions do not match"));
}
@@ -166,6 +179,7 @@ static mp_obj_t linalg_dot(mp_obj_t _m1, mp_obj_t _m2) {
}
return MP_OBJ_FROM_PTR(out);
}
+}
MP_DEFINE_CONST_FUN_OBJ_2(linalg_dot_obj, linalg_dot);
