最小的例子:
import numpy as np
list1 = [1,3,5,7]
list2 = [3,6,9,4]
list3 = [6,5,3,2]
arr = np.random.rand(72,22,22)
pos_list = np.vstack([list1, list2, list3]).T
print(pos_list)
arr[pos_list[0][0], pos_list[0][1], pos_list[0][2]]
for i in pos_list:
print(arr[i[0], i[1], i[2]])
我和我的同事正在嘗試提高上述選點的效率。生成了許多非常大的矩陣,從這些矩陣中,必須提取出許多特定的點。
在上面的代碼中,被選中的第一個點是 (list1[0], list2[0], list3[0])。這一直持續到(更大的)串列的末尾。
是否有一種矢量化方法來避免使用 for 回圈,因為必須多次執行此特定操作?或者幾乎任何比上述 for 回圈更有效的方式?
uj5u.com熱心網友回復:
我相信這可以滿足您的要求,另請參見此處:
pos_array = np.array(pos_list)
arr[pos_array[:,0], pos_array[:,1],pos_array[:,2]]
輸出:
array([0.10539037, 0.17852727, 0.18794522, 0.04191294])
或者,您也可以直接創建一個串列陣列,跳過vstack和 轉置:
import numpy as np
list1 = [1,3,5,7]
list2 = [3,6,9,4]
list3 = [6,5,3,2]
pos_array = np.array([list1,list2,list3])
arr = np.random.rand(72,22,22)
arr[pos_array[0], pos_array[1], pos_array[2]]
輸出:
array([0.10539037, 0.17852727, 0.18794522, 0.04191294])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384718.html
