在Python中修改特定索引的多维数组

时间:2018-02-04 00:42:13

标签: python python-3.x numpy

让我说我有一个形状为n的阵列:(10,20,3) 我想为所有行和列修改第三个数组的索引2。 我试着这样做:

A[:,:,2] += 100

这部分有效,但是当我想检查索引2处的每一行和列的值是否高于200时,除非我使用两个嵌套的for循环,否则我无法检查。 这有效,但它根本不快。

这就是我现在所拥有的:

for i in range(0,10):
    for j in range(20):
        if (A[i,j,2] + 100) > 200 :
            A[i,j,2] = 200
        else:
            A[i,j,2] += 100

我正在寻找一种更有效,更优雅的方法来实现这一目标。

1 个答案:

答案 0 :(得分:2)

我知道你想为第三维的第二个索引中的所有元素添加100 ...但是如果总和超过200,那就把它设为200.

NumPy的经验法则是你从不需要循环。我认为你可以通过索引直接实现你想要的东西,例如:

>>> import numpy as np
>>> A = np.random.random((10, 20, 3))*200
>>> A[...,2] += 100
>>> A[...,2][A[...,2] > 200] = 200
array([[[ 131.94487476,   57.20338449,  200.        ],
        [  22.7506817 ,  145.74740259,  200.        ],
        [  15.44748999,  180.55442849,  189.48182561],
        [ 160.35622709,    2.37465206,  183.96627351],
        [  67.79103218,   70.28339315,  108.90041475],
        [ 129.33682572,  102.6764913 ,  200.        ],
        .
        .
        .

其中A[...,2]只是在最后一个维度中说出第二个索引(第三个元素)的另一种方式。