Strange behavior with boolean slices...

I have done this before, but am now really confused. Created an array 'day' specifying the 'f' type In [29]: day Out[29]: array([ 5., 5.], dtype=float32) # Have a mask... In [30]: mask Out[30]: array([ True, False], dtype=bool) # So far, so good... In [31]: day[mask] Out[31]: array([ 5.], dtype=float32) In [32]: day[mask] = 10 # What? In [33]: day Out[33]: array([ 10., 10.], dtype=float32) So I created an integer array 'a' In [38]: a Out[38]: array([11, 1]) In [39]: a[mask] Out[39]: array([11]) In [40]: a[mask] = 12 # This is what I expect. In [41]: a Out[41]: array([12, 1]) Am I missing something? Is this supposed to happen? Version 1.7.1. Kindest regards, Tim

On 2013/08/25 2:30 PM, Cera, Tim wrote:
I have done this before, but am now really confused.
Created an array 'day' specifying the 'f' type
In [29]: day Out[29]: array([ 5., 5.], dtype=float32)
# Have a mask... In [30]: mask Out[30]: array([ True, False], dtype=bool)
# So far, so good... In [31]: day[mask] Out[31]: array([ 5.], dtype=float32)
In [32]: day[mask] = 10
# What? In [33]: day Out[33]: array([ 10., 10.], dtype=float32)
I'm not getting that with 1.7.0: In [2]: np.__version__ Out[2]: '1.7.0' In [3]: mask = np.array([True, False], dtype=bool) In [4]: day = np.array([5, 5], dtype=np.float32) In [5]: day Out[5]: array([ 5., 5.], dtype=float32) In [6]: mask Out[6]: array([ True, False], dtype=bool) In [7]: day[mask] Out[7]: array([ 5.], dtype=float32) In [8]: day[mask] = 10 In [9]: day Out[9]: array([ 10., 5.], dtype=float32) Eric
So I created an integer array 'a'
In [38]: a Out[38]: array([11, 1])
In [39]: a[mask] Out[39]: array([11])
In [40]: a[mask] = 12
# This is what I expect. In [41]: a Out[41]: array([12, 1])
Am I missing something? Is this supposed to happen?
Version 1.7.1.
Kindest regards, Tim _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion

Figured it out. I created 'day' as a broadcast array. Does this catch other people? Basically changing day[0] would change the entire 'day' array. I guess all other elements of the day array are views of day[0]. Made a copy and everything works as expected. Kindest regards, Tim On Sun, Aug 25, 2013 at 8:44 PM, Eric Firing <efiring@hawaii.edu> wrote:
On 2013/08/25 2:30 PM, Cera, Tim wrote:
I have done this before, but am now really confused.
Created an array 'day' specifying the 'f' type
In [29]: day Out[29]: array([ 5., 5.], dtype=float32)
# Have a mask... In [30]: mask Out[30]: array([ True, False], dtype=bool)
# So far, so good... In [31]: day[mask] Out[31]: array([ 5.], dtype=float32)
In [32]: day[mask] = 10
# What? In [33]: day Out[33]: array([ 10., 10.], dtype=float32)
I'm not getting that with 1.7.0: In [2]: np.__version__ Out[2]: '1.7.0'
In [3]: mask = np.array([True, False], dtype=bool)
In [4]: day = np.array([5, 5], dtype=np.float32)
In [5]: day Out[5]: array([ 5., 5.], dtype=float32)
In [6]: mask Out[6]: array([ True, False], dtype=bool)
In [7]: day[mask] Out[7]: array([ 5.], dtype=float32)
In [8]: day[mask] = 10
In [9]: day Out[9]: array([ 10., 5.], dtype=float32)
Eric
So I created an integer array 'a'
In [38]: a Out[38]: array([11, 1])
In [39]: a[mask] Out[39]: array([11])
In [40]: a[mask] = 12
# This is what I expect. In [41]: a Out[41]: array([12, 1])
Am I missing something? Is this supposed to happen?
Version 1.7.1.
Kindest regards, Tim _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion

Pardon the noise. The behavior is described right there in the documentation of broadcast_arrays. Kindest regards, Tim On Sun, Aug 25, 2013 at 8:53 PM, Cera, Tim <tim@cerazone.net> wrote:
Figured it out. I created 'day' as a broadcast array. Does this catch other people? Basically changing day[0] would change the entire 'day' array. I guess all other elements of the day array are views of day[0]. Made a copy and everything works as expected.
Kindest regards, Tim
On Sun, Aug 25, 2013 at 8:44 PM, Eric Firing <efiring@hawaii.edu> wrote:
On 2013/08/25 2:30 PM, Cera, Tim wrote:
I have done this before, but am now really confused.
Created an array 'day' specifying the 'f' type
In [29]: day Out[29]: array([ 5., 5.], dtype=float32)
# Have a mask... In [30]: mask Out[30]: array([ True, False], dtype=bool)
# So far, so good... In [31]: day[mask] Out[31]: array([ 5.], dtype=float32)
In [32]: day[mask] = 10
# What? In [33]: day Out[33]: array([ 10., 10.], dtype=float32)
I'm not getting that with 1.7.0: In [2]: np.__version__ Out[2]: '1.7.0'
In [3]: mask = np.array([True, False], dtype=bool)
In [4]: day = np.array([5, 5], dtype=np.float32)
In [5]: day Out[5]: array([ 5., 5.], dtype=float32)
In [6]: mask Out[6]: array([ True, False], dtype=bool)
In [7]: day[mask] Out[7]: array([ 5.], dtype=float32)
In [8]: day[mask] = 10
In [9]: day Out[9]: array([ 10., 5.], dtype=float32)
Eric
So I created an integer array 'a'
In [38]: a Out[38]: array([11, 1])
In [39]: a[mask] Out[39]: array([11])
In [40]: a[mask] = 12
# This is what I expect. In [41]: a Out[41]: array([12, 1])
Am I missing something? Is this supposed to happen?
Version 1.7.1.
Kindest regards, Tim _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion

On 2013/08/25 2:30 PM, Cera, Tim wrote:
I have done this before, but am now really confused.
Created an array 'day' specifying the 'f' type
In [29]: day Out[29]: array([ 5., 5.], dtype=float32)
# Have a mask... In [30]: mask Out[30]: array([ True, False], dtype=bool)
# So far, so good... In [31]: day[mask] Out[31]: array([ 5.], dtype=float32)
In [32]: day[mask] = 10
# What? In [33]: day Out[33]: array([ 10., 10.], dtype=float32)
I don't get it with 1.7.1, either: In [2]: np.__version__ Out[2]: '1.7.1' In [3]: %paste mask = np.array([True, False], dtype=bool) day = np.array([5, 5], dtype=np.float32) day mask day[mask] day[mask] = 10 day ## -- End pasted text -- Out[3]: array([ 10., 5.], dtype=float32) My 1.7.0 example is on a Mac, the 1.7.1 is on a Linux virtual machine, both 64-bit. Eric
So I created an integer array 'a'
In [38]: a Out[38]: array([11, 1])
In [39]: a[mask] Out[39]: array([11])
In [40]: a[mask] = 12
# This is what I expect. In [41]: a Out[41]: array([12, 1])
Am I missing something? Is this supposed to happen?
Version 1.7.1.
Kindest regards, Tim _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
participants (2)
-
Cera, Tim
-
Eric Firing