我有像A
这样的3D数组A = np.random.randint(20,size=(4,2,2))
array([[[18, 8],
[ 2, 11]],
[[ 9, 8],
[ 9, 10]],
[[ 0, 1],
[10, 6]],
[[ 1, 8],
[ 4, 2]]])
我想要做的是将函数应用于沿轴= 0的某些索引。例如,我想将A [1]和A [3]乘以2并将它们加10。我知道一个选择是:
for index in [1,3]:
A[index] = A[index]*2+10
给出了:
array([[[18, 8],
[ 2, 11]],
[[28, 26],
[28, 30]],
[[ 0, 1],
[10, 6]],
[[12, 26],
[18, 14]]])
但我的原始数组大小为(2500,300,300),我需要每次沿着轴= 0将该函数应用于500个非连续索引。是否有更快,更pythonic的方式来做它?
答案 0 :(得分:2)
你可以使用阶梯式切片
A[1::2] = A[1::2] * 2 + 10
A
array([[[18, 8],
[ 2, 11]],
[[28, 26],
[28, 30]],
[[ 0, 1],
[10, 6]],
[[12, 26],
[18, 14]]])
或假设您的切片名为slc
A[slc] = A[slc] * 2 + 10