Bottom Page

• 0 Vote(s) - 0 Average
• 1
• 2
• 3
• 4
• 5
 matrixes product paul18fr Wafer-Thin Wafer Posts: 86 Threads: 22 Joined: Apr 2019 Reputation: 3 Likes received: 2 #1 Jul-18-2019, 07:32 PM (This post was last modified: Jul-18-2019, 07:32 PM by paul18fr. Edited 2 times in total.) Hi all I'm a Matlab user and I'm progressively rewritting codes into Python using mainly Numpy library and scientific ones (for vectorization - slicing and so); recently I've been confronted to wrong results ; finally I found that it came from the matrixes product; indeed it's necessary to use numpy.dot or "@" character but not "*" one as I did; the strangest thing is that all my previous codes using "*" went to good results. Thus I'm wondering what's the origin of such behaviour? Just bellow some trials I made in order to test accury and performance of some solutions. Additional question: why F1 is here a matrix and not a vector? there something I've probably not understood so far Thanks for any advice Paul ```#!/usr/bin/env python3 # -*- coding: utf-8 -*- import numpy as np import time ################## pure (n,c) matrix with c > 1 n = 5_000; A = np.random.random( (n,n) ); B = np.random.random( (n,n) ); C = np.random.random( (n,1) ); # using numpy t0 = time.time(); D1 = np.dot(np.dot(A,B),C); t1 = time.time(); print("Duration method 1: {}".format(t1-t0)); # using @ t0 = time.time(); D2 =A @ B @ C; t1 = time.time(); print("Duration method 2: {}".format(t1-t0)); # using * t0 = time.time(); D3 = A * B * C; t1 = time.time(); print("Duration (wrong) method 3: {}".format(t1-t0)); ################ (Matrix * vector) => vector F1 = A * C; F2 = np.dot(A,C); max_F2_minus_F1 = np.max(np.absolute(F2 - F1)); print("Max (F2 - F1) = {}".format(max_F2_minus_F1)); F3 = A @ C; max_F3_minus_F2 = np.max(np.absolute(F3 - F2)); print("Max (F3 - F2) = {}".format(max_F3_minus_F2)); ``` Finally I guess I've found where my confusion comes from: implicitly numpy uses vectorization (where we need to use " .* " under Matlab, so using (A*B) uner Python it multiplies each row to perform matrix product (linear algebra), then it's necessary to use numpy.dot or "@" Here after a basic example. Paul ```import numpy as np import time n = 5_000; C = np.random.random( (n,1) ); D = np.random.random( (n,1) ); G1 = D * C; D = np.transpose(D) G2 = D @ C; ``` « Next Oldest | Next Newest »

Top Page

 Possibly Related Threads... Thread Author Replies Views Last Post Executing Scipy Tensor Product John_Doe 1 364 Dec-06-2019, 10:28 AM Last Post: paul18fr Vector field cross product Eduard 2 728 Aug-20-2018, 02:54 PM Last Post: Eduard

Forum Jump:

Users browsing this thread: 1 Guest(s)