numruby
numruby copied to clipboard
RubyGrant 2020 related work
- Added the nmatrix_buffer struct
- Used buffer in slicing
- Used TypedData_*_Struct
- Fixed some warnings
The way buffer is used in slicing is that when slicing is called, instead of copying the elements into new nmatrix struct, a nmatrix_buffer struct is created and just the elements pointer to used to create the pointer of buffer matrix which removes the copying of elements and hence preventing a copy.
Also, nmatrix_buffer points to the original matrix and uses the original shape to create strides which are used in conjunction with buffer elements starting pointer to correctly access the sliced matrix elements from the original matrix elements array. This makes the sliced matrix as a view to the original matrix and one can change the sliced matrix elements and same change can be seen in the original matrix elements.
One can also create a view by doing a slice on a sliced matrix and internally the nmatrix_buffer would be created from nmatrix_buffer of given sliced matrix and the original matrix struct which is accessed from the given nmatrix_buffer.