查找最大值子数组的索引并将其应用于该子数组
Find indices for max values subarrays and applying it on that subarray
我有一个文件 f
,其中包含 N 个(未知)events
。每个事件都带有(未知且每个事件不同,称为 i、j 等)重建量 tracks
。然后,每个轨道都具有能量 E
和似然 lik
等属性。所以,
>>> print(f.events.tracks.lik)
[[lik1, lik2, ..., likX], [lik1, lik2, ..., likj], ..., [lik1, lik2, ..., likz]]
打印一个包含 N 个子数组的数组(每个 event
一个),每个子数组显示其所有 tracks
.
的 lik
目标:调用 f.events.tracks[:, Inds].E
以最大似然获取轨道的能量。
最小代码示例
>>>import numpy as np
>>>lik = np.random.randint(low=0, high=100, size=50).reshape(5, 10)
>>>print(lik)
[[ 3 49 27 3 80 59 96 99 84 34]
[88 62 61 83 90 9 62 30 92 80]
[ 5 21 69 40 2 40 13 63 42 46]
[ 0 55 71 67 63 49 29 7 21 7]
[40 7 68 46 95 34 74 88 79 15]]
>>>energy = np.random.randint(low=100, high=2000, size=50).reshape(5, 10)
>>>print(energy)
[[1324 1812 917 553 185 743 358 877 1041 905]
[1407 663 359 383 339 1403 1511 1964 1797 1096]
[ 315 1431 565 786 544 1370 919 1617 1442 925]
[1710 698 246 1631 1374 1844 595 465 908 953]
[ 305 384 668 952 458 793 303 153 661 791]]
>>> Inds = np.argmax(lik, axis=1)
>>> print(Inds)
[2 1 8 6 7]
问题:
>>> # call energy[Inds] to get
# [917, 663, 1442, 1844, 153]
获取这些能量的正确方法是什么?
您可以 select 使用包含 [0,1,2,...]
的临时数组(使用 np.arange
生成)的二维索引为每行 Inds
索引的值。
这是一个例子:
energy[np.arange(len(Inds)), Inds]
我有一个文件 f
,其中包含 N 个(未知)events
。每个事件都带有(未知且每个事件不同,称为 i、j 等)重建量 tracks
。然后,每个轨道都具有能量 E
和似然 lik
等属性。所以,
>>> print(f.events.tracks.lik)
[[lik1, lik2, ..., likX], [lik1, lik2, ..., likj], ..., [lik1, lik2, ..., likz]]
打印一个包含 N 个子数组的数组(每个 event
一个),每个子数组显示其所有 tracks
.
lik
目标:调用 f.events.tracks[:, Inds].E
以最大似然获取轨道的能量。
最小代码示例
>>>import numpy as np
>>>lik = np.random.randint(low=0, high=100, size=50).reshape(5, 10)
>>>print(lik)
[[ 3 49 27 3 80 59 96 99 84 34]
[88 62 61 83 90 9 62 30 92 80]
[ 5 21 69 40 2 40 13 63 42 46]
[ 0 55 71 67 63 49 29 7 21 7]
[40 7 68 46 95 34 74 88 79 15]]
>>>energy = np.random.randint(low=100, high=2000, size=50).reshape(5, 10)
>>>print(energy)
[[1324 1812 917 553 185 743 358 877 1041 905]
[1407 663 359 383 339 1403 1511 1964 1797 1096]
[ 315 1431 565 786 544 1370 919 1617 1442 925]
[1710 698 246 1631 1374 1844 595 465 908 953]
[ 305 384 668 952 458 793 303 153 661 791]]
>>> Inds = np.argmax(lik, axis=1)
>>> print(Inds)
[2 1 8 6 7]
问题:
>>> # call energy[Inds] to get
# [917, 663, 1442, 1844, 153]
获取这些能量的正确方法是什么?
您可以 select 使用包含 [0,1,2,...]
的临时数组(使用 np.arange
生成)的二维索引为每行 Inds
索引的值。
这是一个例子:
energy[np.arange(len(Inds)), Inds]