diff options
author | Sebastian Berg <sebastian@sipsolutions.net> | 2012-10-21 17:48:14 +0200 |
---|---|---|
committer | Sebastian Berg <sebastian@sipsolutions.net> | 2012-10-21 17:53:51 +0200 |
commit | b46f589439201afabbcc9be586617e395ccc6c19 (patch) | |
tree | 0f28b3d901dac116d75f388c858c05d56a10eb40 | |
parent | fe6f42c427239d36579723085cc5207cedd8dcd1 (diff) | |
download | numpy-b46f589439201afabbcc9be586617e395ccc6c19.tar.gz |
ENH: Do not rely on clean strides for loops.
In lowlevel_strided_loops.h, do not rely that the strides for
contiguous arrays are set nicely since they can be considered not
important if an axis dimensions is zero.
-rw-r--r-- | numpy/core/src/private/lowlevel_strided_loops.h | 46 |
1 files changed, 18 insertions, 28 deletions
diff --git a/numpy/core/src/private/lowlevel_strided_loops.h b/numpy/core/src/private/lowlevel_strided_loops.h index a73dd12cf..e7a20a67a 100644 --- a/numpy/core/src/private/lowlevel_strided_loops.h +++ b/numpy/core/src/private/lowlevel_strided_loops.h @@ -552,10 +552,10 @@ PyArray_PrepareThreeRawArrayIter(int ndim, npy_intp *shape, count = PyArray_SIZE(arr), \ data = PyArray_BYTES(arr), \ stride = ((PyArray_NDIM(arr) == 0) ? 0 : \ - (PyArray_CHKFLAGS(arr, NPY_ARRAY_F_CONTIGUOUS) ? \ + ((PyArray_NDIM(arr) == 1) ? \ PyArray_STRIDE(arr, 0) : \ - PyArray_STRIDE(arr, \ - PyArray_NDIM(arr)-1))) + PyArray_DESCR(arr)->elsize)) \ + #define PyArray_TRIVIALLY_ITERABLE_PAIR(arr1, arr2) (\ PyArray_TRIVIALLY_ITERABLE(arr1) && \ @@ -575,16 +575,12 @@ PyArray_PrepareThreeRawArrayIter(int ndim, npy_intp *shape, count = ((size1 > size2) || size1 == 0) ? size1 : size2; \ data1 = PyArray_BYTES(arr1); \ data2 = PyArray_BYTES(arr2); \ - stride1 = (size1 == 1 ? 0 : \ - (PyArray_CHKFLAGS(arr1, NPY_ARRAY_F_CONTIGUOUS) ? \ - PyArray_STRIDE(arr1, 0) : \ - PyArray_STRIDE(arr1, \ - PyArray_NDIM(arr1)-1))); \ - stride2 = (size2 == 1 ? 0 : \ - (PyArray_CHKFLAGS(arr2, NPY_ARRAY_F_CONTIGUOUS) ? \ - PyArray_STRIDE(arr2, 0) : \ - PyArray_STRIDE(arr2, \ - PyArray_NDIM(arr2)-1))); \ + stride1 = (size1 == 1 ? 0 : ((PyArray_NDIM(arr1) == 1) ? \ + PyArray_STRIDE(arr1, 0) : \ + PyArray_DESCR(arr1)->elsize)); \ + stride2 = (size2 == 1 ? 0 : ((PyArray_NDIM(arr2) == 1) ? \ + PyArray_STRIDE(arr2, 0) : \ + PyArray_DESCR(arr2)->elsize)); \ } #define PyArray_TRIVIALLY_ITERABLE_TRIPLE(arr1, arr2, arr3) (\ @@ -620,21 +616,15 @@ PyArray_PrepareThreeRawArrayIter(int ndim, npy_intp *shape, data1 = PyArray_BYTES(arr1); \ data2 = PyArray_BYTES(arr2); \ data3 = PyArray_BYTES(arr3); \ - stride1 = (size1 == 1 ? 0 : \ - (PyArray_CHKFLAGS(arr1, NPY_ARRAY_F_CONTIGUOUS) ? \ - PyArray_STRIDE(arr1, 0) : \ - PyArray_STRIDE(arr1, \ - PyArray_NDIM(arr1)-1))); \ - stride2 = (size2 == 1 ? 0 : \ - (PyArray_CHKFLAGS(arr2, NPY_ARRAY_F_CONTIGUOUS) ? \ - PyArray_STRIDE(arr2, 0) : \ - PyArray_STRIDE(arr2, \ - PyArray_NDIM(arr2)-1))); \ - stride3 = (size3 == 1 ? 0 : \ - (PyArray_CHKFLAGS(arr3, NPY_ARRAY_F_CONTIGUOUS) ? \ - PyArray_STRIDE(arr3, 0) : \ - PyArray_STRIDE(arr3, \ - PyArray_NDIM(arr3)-1))); \ + stride1 = (size1 == 1 ? 0 : ((PyArray_NDIM(arr1) == 1) ? \ + PyArray_STRIDE(arr1, 0) : \ + PyArray_DESCR(arr1)->elsize)); \ + stride2 = (size2 == 1 ? 0 : ((PyArray_NDIM(arr2) == 1) ? \ + PyArray_STRIDE(arr2, 0) : \ + PyArray_DESCR(arr2)->elsize)); \ + stride3 = (size3 == 1 ? 0 : ((PyArray_NDIM(arr3) == 1) ? \ + PyArray_STRIDE(arr3, 0) : \ + PyArray_DESCR(arr3)->elsize)); \ } #endif |