[Numpy-discussion] question about array slicing and element assignment (original) (raw)

Emil Sidky sidky at uchicago.edu
Tue Jun 19 13:51:12 EDT 2018


Hello, The following is an example where an array element assignment didn't work as I expected. Create a 6 x 3 matrix:

In [70]: a =  randn(6,3)

In [71]: a Out[71]: array([[ 1.73266816,  0.948849  ,  0.69188222],        [-0.61840161, -0.03449826,  0.15032552],        [ 0.4963306 ,  0.77028209, -0.63076396],        [-1.92273602, -1.03146536,  0.27744612],        [ 0.70736325,  1.54687964, -0.75573888],        [ 0.16316043, -0.34814532,  0.3683143 ]])

Create a 3x3 boolean array: In [72]: mask = randn(3,3)>0.

In [73]: mask Out[73]: array([[ True,  True,  True],        [False,  True,  True],        [ True, False,  True]], dtype=bool)

Try to modify elements of "a" with the following line: In [74]: a[(2,3,5),][mask] = 1. No elements are changed in "a": In [75]: a Out[75]: array([[ 1.73266816,  0.948849  ,  0.69188222],        [-0.61840161, -0.03449826,  0.15032552],        [ 0.4963306 ,  0.77028209, -0.63076396],        [-1.92273602, -1.03146536,  0.27744612],        [ 0.70736325,  1.54687964, -0.75573888],        [ 0.16316043, -0.34814532,  0.3683143 ]])

Instead try to modify elements of "a" with this line: In [76]: a[::2,][mask] = 1.

This time it works: In [77]: a Out[77]: array([[ 1.        ,  1.        ,  1.        ],        [-0.61840161, -0.03449826,  0.15032552],        [ 0.4963306 ,  1.        ,  1.        ],        [-1.92273602, -1.03146536,  0.27744612],        [ 1.        ,  1.54687964,  1.        ],        [ 0.16316043, -0.34814532,  0.3683143 ]])

Is there a way where I can modify the elements of "a" selected by an expression like "a[(2,3,5),][mask]" ?

Thanks , Emil



More information about the NumPy-Discussion mailing list