我想在三个数组上使用numpy进行多维数组操作,其中一个是索引数组,例如:
a = numpy.arange(20).reshape((5, 4))
# a = [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19]]
b = numpy.arange(24).reshape(((3, 2, 4)))
# b = [[[ 0 1 2 3] [ 4 5 6 7]] [[ 8 9 10 11] [12 13 14 15]] [[16 17 18 19] [20 21 22 23]]]
c = numpy.array([0,0,1,1,2])
# c = [0 0 1 1 2]
现在,我想要的是:
d = a * b[&] + b[&&]
其中&是 b 的第二维的第二个元素(例如[4 5 6 7])和&&是第二维的第一个元素(例如[0 1 2 3])与 i 第一维 b 的项目相关,其中 i 来自数组 c (例如,对于数组 b 的第一个维度的第一个元素,c [0] = 0)。 d 与 a 具有相同的维度。
编辑:以上示例的答案是:
# d = [[0 6 14 24] [16 26 38 52] [104 126 150 176] [152 178 206 236] [336 374 414 456]]
由于
答案 0 :(得分:3)
>>> a * b[c,1,:] + b[c,0,:]
array([[ 0, 6, 14, 24],
[ 16, 26, 38, 52],
[104, 126, 150, 176],
[152, 178, 206, 236],
[336, 374, 414, 456]])