1
我寫了一個函數,它接受一組隨機笛卡爾座標並返回保留在某個空間域內的子集。爲了說明:使用數組索引在3D數組上應用2D數組函數
grid = np.ones((5,5))
grid = np.lib.pad(grid, ((10,10), (10,10)), 'constant')
>> np.shape(grid)
(25, 25)
random_pts = np.random.random(size=(100, 2)) * len(grid)
def inside(input):
idx = np.floor(input).astype(np.int)
mask = grid[idx[:,0], idx[:,1]] == 1
return input[mask]
>> inside(random_pts)
array([[ 10.59441506, 11.37998288],
[ 10.39124766, 13.27615815],
[ 12.28225713, 10.6970708 ],
[ 13.78351949, 12.9933591 ]])
但現在我想同時產生n
套random_pts,並保持滿足同樣功能的條件n
相應的子集的能力。所以,如果n=3
,
random_pts = np.random.random(size=(3, 100, 2)) * len(grid)
沒有求助於for循環,我怎麼可能指數我的變量,使得inside(random_pts)
回報像
array([[[ 17.73323523, 9.81956681],
[ 10.97074592, 2.19671642],
[ 21.12081044, 12.80412997]],
[[ 11.41995519, 2.60974757]],
[[ 9.89827156, 9.74580059],
[ 17.35840479, 7.76972241]]])
只是好奇 - 做了發佈的解決方案爲您工作? – Divakar
這是功能,但不是很實用;當函數需要迭代調用時,額外的數組操作會導致性能下降。我希望有一個更直接的方法來切分輸入,可以達到相同的結果。 –
因此,對於問題中的發佈數據,您希望有三個獨立的數組,對嗎?爲了獲得這樣的單獨數組,'np.split'是最爲人所知的方法,但速度很慢,因爲存在一個分裂多數組操作。我認爲這是這裏最慢的部分。如果您對非分割輸出沒問題,則發佈的解決方案中的「out_cat_array」可能是您的輸出。 – Divakar