将ndarray除以自己的列索引

时间:2016-10-25 22:20:20

标签: numpy multidimensional-array vectorization

我有这个numpy ndarray:

myarray = np.array([[[ 1.,  2.,  3.],
                     [ 1.,  2.,  3.]],
                     [[ 4.,  5.,  6.],
                      [ 4.,  5.,  6.]]])

是否有任何向量运算可以将ndarray中的每个值除以(值'自己的列索引+ 1)?

我想要的结果是

[[[1., 1., 1.],
 [1., 1., 1.]],
 [[4., 2.5, 2.],
 [4., 2.5, 2.]]]

感谢。

2 个答案:

答案 0 :(得分:1)

您可以在所有列中使用NumPy broadcasting进行矢量化分割,如此 -

myarray/(np.arange(myarray.shape[-1])+1)

示例运行 -

In [244]: myarray
Out[244]: 
array([[[ 1.,  2.,  3.],
        [ 1.,  2.,  3.]],

       [[ 4.,  5.,  6.],
        [ 4.,  5.,  6.]]])

In [245]: myarray/(np.arange(myarray.shape[-1])+1)
Out[245]: 
array([[[ 1. ,  1. ,  1. ],
        [ 1. ,  1. ,  1. ]],

       [[ 4. ,  2.5,  2. ],
        [ 4. ,  2.5,  2. ]]])

答案 1 :(得分:0)

对于更一般的情况,您可以沿着某个轴除以(基于一个)索引:

axis = 1
myarray / (1 + np.indices(myarray.shape)[axis])