正如標題所說,如果滿足特定條件,我會嘗試更改二維陣列中圓的值。到目前為止,我從這里的另一個問題中得到了這個:
import numpy as np
x = np.arange(0, 20)
y = np.arange(0, 20)
arr = np.zeros((y.size, x.size))
cx = 10.
cy = 10.
r = 4.
mask = (x[np.newaxis, :] - cx) ** 2 (y[:, np.newaxis] - cy) ** 2 < r ** 2
arr[mask] = 1
cx和cy是圓心的坐標,r是它的半徑。mask包含圓圈,并且其中的所有元素都設定為 1,這很好用。我想要做的只是僅在它們小于 5 或??任何類似條件時才更改它們的值。顯然這個陣列只有 0,但我的真實資料會預先設定其他值)。
uj5u.com熱心網友回復:
掩碼是布林值,您可以使用按位運算或邏輯運算將它們與其他掩碼組合在一起:
circle_mask = (x[np.newaxis, :] - cx) ** 2 (y[:, np.newaxis] - cy) ** 2 < r ** 2
less_than_5_mask = arr < 5
arr[circle_mask & less_than_5_mask] = 1
在這種情況下,&是按位、逐元素布爾 AND 運算子。如果您想替換圓圈內和/或小于 5 的位置,您可以改用|運算子。
&np.bitwise_and在這種情況下是更快的等效項。由于您的陣列是布林值,因此您可以使用np.logical_and相同的效果。請注意,這是不一樣的使用and操作,由于操作者會試圖將整個陣列蒸餾成單個布林值,導致一個錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348721.html
下一篇:乘積矢量化
