考虑形状为(7,6)的numpy数组A
A = array([[0, 1, 2, 3, 5, 8],
[4, 100, 6, 7, 8, 7],
[8, 9, 10, 11, 5, 4],
[12, 13, 14, 15, 1, 2],
[1, 3, 5, 6, 4, 8],
[12, 23, 12, 24, 4, 3],
[1, 3, 5, 7, 89, 0]])
以及具有相同形状的第二个numpy数组r,其中包含从中心点A(3,2)= 0开始的半径A:
r = array([[3, 3, 3, 3, 3, 4],
[2, 2, 2, 2, 2, 3],
[2, 1, 1, 1, 2, 3],
[2, 1, 0, 1, 2, 3],
[2, 1, 1, 1, 2, 3],
[2, 2, 2, 2, 2, 3],
[3, 3, 3, 3, 3, 4]])
我想拾取位于r的位置1的A的所有元素,即[9,10,11,15,4,6,5,13],位于A的位置2的所有元素r等。我有一些numpy函数来做到这一点吗?谢谢
您可以A
通过执行类似的操作来选择一个部分A[r == 1]
,以将所有部分作为列表进行选择[A[r == i] for i in range(r.max() + 1)]
。这会起作用,但可能会效率不高,具体取决于要输入的值有多大,r
因为您需要r == i
为每个计算i
。
您也可以使用此技巧,首先基于r对A进行排序,然后仅在正确的位置拆分已排序的A数组。看起来像这样:
r_flat = r.ravel()
order = r_flat.argsort()
A_sorted = A.ravel()[order]
r_sorted = r_flat[order]
edges = r_sorted.searchsorted(np.arange(r_sorted[-1] + 1), 'right')
sections = []
start = 0
for end in edges:
sections.append(A_sorted[start:end])
start = end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句