我想制作一個以陣列為第一引數的函式,該函式接收一個任意大小和形狀的arr陣列,并將其在給定[a,b]區間的所有值覆寫為等于c。
arr = np.array([[5., 2. , -5.], [4., 3., 1.]])
overwrite_interval(arr, -2., 2., 100.) -> ndarray([[5., 100., -5. ], [4., 3., 100.]])
def overwrite_interval(arr , a , b , c)。
for i in arr[,:]:
arr[a,b] = c
arr = np.array([[5./span>, 2./span>, -5. ], [4., 3., 1.]])
assert overwrite_interval(arr, -2., 2., 100.) #-> ndarray([[5., 100., -5.], [4., 3., 100.]])/span>
uj5u.com熱心網友回復:
我認為你的問題的措辭方式與你所舉的例子不一致。首先,你給出的例子陣列是3D的,而不是2D的。你可以做
>>> arr.shape
(1,2, 3)
>>> arr.ndim
3
估計這是個錯誤,你希望你的陣列是二維的,所以你會這樣做
arr = np.array([5., 2. , -5.], [4., 3., 1.] ])
取而代之。
其次,如果a和b是值,如果一個元素在兩者之間,那么要將該元素設定為值c,而不是a和b是索引,那么np.where函式就很適合這個。
def overwrite_interval(arr , a , b , c)。
inds = np.where((arr >= a) * (arr <= b))
arr[inds] = c
return arr
np.where回傳一個元組,所以有時直接處理布爾陣列會更容易。在這種情況下,這個函式看起來像這樣
def overwrite_interval(arr , a , b , c)。
inds = (arr >= a) * (arr <= b)
arr[inds] = c
return arr
這對你來說有用嗎,這是你想要的意思嗎?請注意,如果你仍然想讓初始陣列成為一個三維陣列,那么我提供的解決方案將照常作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/322414.html
標籤:
上一篇:如何修改char陣列中的字符
