[英]How to fill numpy array of zeros with ones given index ranges/slices
這個問題與下面提到的另外兩個問題密切相關。 盡管可以對它們進行調整,但我不確定它們能否針對這種特定情況提供最佳解決方案。
給定一個 numpy 的零數組
arr = np.zeros([2, 5])
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
根據另一個范圍數組(或元組列表)填充零
ranges_ones = np.array([[0,3], [1,4]])
結果
array([[1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1.]])
如何用給定索引范圍/切片的零填充 numpy 數組?
相關問題:
使用 numpy 廣播,您可以創建一個 boolean 數組,該數組對於您希望為 1 的單元格為 True,否則為 False。 由於ranges_ones
的第一列是起始索引,第二列是結束索引,我們可以使用&
創建一個區間
idx = np.arange(arr.shape[1])
s = (idx >= ranges_ones[:, [0]])
e = (idx <= ranges_ones[:, [1]])
arr[s & e] = 1
Output:
>>> arr
array([[1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1.]])
您可以根據范圍數組創建切片對象。 結果與您的預期答案不同,因為在切片時不包括范圍的停止值,但很容易調整它,因此結果就是您要查找的結果。
import numpy as np
arr = np.zeros([2, 5])
ranges_ones = np.array([[0,3], [1,4]])
for i, range in enumerate(ranges_ones):
arr[i, slice(range[0], range[1])] = 1
# arr[i, range[0]:range[1]] = 1 also works btw
print(arr) # [[1. 1. 1. 0. 0.] [0. 1. 1. 1. 0.]]
一個簡單的enumerate()
調用應該可以解決問題:
import numpy as np
arr = np.zeros([2, 5])
ranges_ones = np.array([[0, 4], [1, 4]])
for i, (a, b) in enumerate(ranges_ones):
arr[i, a: b] = 1
print(arr)
Output:
[[1. 1. 1. 1. 0.]
[0. 1. 1. 1. 0.]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.