On Mo, 2016-01-25 at 16:11 +0100, Sturla Molden wrote: > On 23/01/16 22:25, Sebastian Berg wrote: > > > Do you agree with this, or would it be a major inconvenience? > > I think any user of as_strided should be considered a power user. > This > is an inherently dangerous function, that can easily segfault the > process. Anyone who uses as_strided should be assumed to have taken > all > precautions. >
I am ready to accept this notion (and I guess just put repeated warnings in the doc string). However, two things about it, first my impression is that for a lot of "not really power users" this function sometimes seems like a big hammer to solve all their problems. Second, I think even power users have sometimes wrong ideas about numpy's ufuncs and memory overlap. This starts with operations such as `arr[1:] += arr[:-1]` (see [1]) (for which there is at least a start on fixing it), and only gets worse with self-overlapping arrays. That said, I guess I could agree with you in the regard that there are so many *other* awful ways to use as_strided, that maybe it really is just so bad, that improving one thing doesn't actually help anyway ;). I was actually considering adding a UserWarning when it is likely that invalid memory is being addressed. I still dislike that it returns something writable *as default* though. Unless you write a single element, writing to such an array will be in many cases unpredictable, no matter how power user you are. - Sebastian [1] WARNING: This is a dangerous example, we ideally want it to be identical to arr[1:] += arr[:-1].copy() always: In [7]: arr = np.arange(10).reshape(5, 2) In [8]: arr[1:] += arr[:-1] In [9]: arr Out[9]: array([[ 0, 1], [ 2, 4], [ 6, 9], [12, 16], [20, 25]]) In [10]: arr = np.arange(10)[::-1].copy()[::-1].reshape(5, 2) In [11]: arr[1:] += arr[:-1] # happens to be "correct" In [12]: arr Out[12]: array([[ 0, 1], [ 2, 4], [ 6, 8], [10, 12], [14, 16]]) > -1 > > Sturla > > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > https://mail.scipy.org/mailman/listinfo/numpy-discussion >
signature.asc
Description: This is a digitally signed message part
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org https://mail.scipy.org/mailman/listinfo/numpy-discussion