What should specialized-array-reshape do? Bradley Lucier (12 May 2020 22:22 UTC)
|
Re: What should specialized-array-reshape do?
John Cowan
(12 May 2020 22:32 UTC)
|
Re: What should specialized-array-reshape do?
Bradley Lucier
(12 May 2020 22:43 UTC)
|
Re: What should specialized-array-reshape do?
John Cowan
(12 May 2020 23:57 UTC)
|
Re: What should specialized-array-reshape do?
Bradley Lucier
(13 May 2020 01:11 UTC)
|
What should specialized-array-reshape do? Bradley Lucier 12 May 2020 22:22 UTC
I've been looking at numpy's resizing code. Basically, numpy tries to resize an array in place with what it calls a "view", and if that doesn't work, it automatically copies the contents of the old array to a newly allocated array. Here is what I've considered might happen if you ask to resize an array and it can't happen: 1. Do the numpy thing, resize it in place if some sufficient condition is met, otherwise copy it to a new array. The choice is made silently. The code that determines whether a numpy array can be shared in place is found here: https://github.com/numpy/numpy/blob/7f836a9aca57de7fcae188b66ee1d8b60c6fc7b1/numpy/core/src/multiarray/shape.c#L400 but I don't understand it yet. 2. Offer a function array-can-be-reshaped-in-place?, so users can check themselves, and have specialized-array-reshape throw an error if asked to do something impossible. 3. Have specialized-array-reshape return either a resized array (in place) or #f. Then the user must, in general, check the result before going on and using the result, otherwise there will be a difficult-to-debug problem later on. 4. Until now, I've been thinking of array-copy as a reshape operator for both generalized arrays and specialized arrays, with in-place resizing only for specialized array (it doesn't make sense for generalized arrays). Perhaps we could just have array-reshape, with copying the default for generalized arrays, and the possibility of reshaping in place for specialized arrays (extend the NumPy idea). None of these seem very Schemely. Any suggestions? Brad