Yes, it's a dense 2500x2000 matrix.

Loaded strides: (8, 16000)

Copied strides: (20000, 8)

So, matvec is just slower because of strides and where numpy retrieves data? Is there a simple way to do this besides a copy? I can easily afford the copy, just wondering.



On Fri, Aug 25, 2017 at 11:41 PM, Nathaniel Smith <njs@pobox.com> wrote:
On Fri, Aug 25, 2017 at 11:39 PM, Pauli Virtanen <pav@iki.fi> wrote:
> pe, 2017-08-25 kello 23:08 -0700, Jonathan Taylor kirjoitti:
>> I've got a largeish array that I have saved in a .MAT file that I
>> need to
>> use for
>> matvec multiply several times.
>>
>> It seems that if I copy the array before running the matvec I get a
>> significant speedup. Is this known?
>
> If you do the copy in a way such that the format of the matrix is
> different (e.g. different sparse matrix format), then the speed can
> differ. Check print(type(original_matrix), type(copied_matrix)).

If it's a dense matrix, then it's also possible that the original
matrix gets Fortran layout, and the copy is C layout. To test that you
want: print(original_matrix.strides, copied_matrix.strides)

-n

--
Nathaniel J. Smith -- https://vorpus.org
_______________________________________________
SciPy-Dev mailing list
SciPy-Dev@python.org
https://mail.python.org/mailman/listinfo/scipy-dev



--
Jonathan Taylor                         
Dept. of Statistics                     
Sequoia Hall, 137                         
390 Serra Mall
Stanford, CA 94305
Tel:   650.723.9230
Fax:   650.725.8977
Web: http://www-stat.stanford.edu/~jtaylo