It seems that reshape doesn't work correctly on an array which has been
resized using the 0-stride trick e.g.

In [73]: x = array([5])

In [74]: y = as_strided(x, shape=(10,), strides=(0,))

In [75]: y
Out[75]: array([5, 5, 5, 5, 5, 5, 5, 5, 5, 5])

In [76]: y.reshape([10,1])
Out[76]: 
array([[          5],
       [          8],
       [  762933412],
       [-2013265919],
       [         26],
       [         64],
       [  762933414],
       [-2013244356],
       [         26],
       [         64]]) <================ Should all be 5????????

In [77]: y.copy().reshape([10,1])
Out[77]: 
array([[5],
       [5],
       [5],
       [5],
       [5],
       [5],
       [5],
       [5],
       [5],
       [5]])

In [78]: np.__version__
Out[78]: '1.6.2'

Perhaps a clause such as below is required in reshape?

if any(stride == 0 for stride in y.strides):
    return y.copy().reshape(shape)
else:
    return y.reshape(shape)


Regards,
Dave



_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to