让我说我有一个形状为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
我正在寻找一种更有效,更优雅的方法来实现这一目标。
答案 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]
只是在最后一个维度中说出第二个索引(第三个元素)的另一种方式。