为什么在布尔过滤数组中切片没有发生......?
Why slicing in boolean filtered array is not happening..?
当我尝试对布尔过滤的 numpy 数组进行切片时,它并没有改变它的值。
请看
array = np.array([1,2,3,4,5,6,7,8])
array[array>=2]
数组([2, 3, 4, 5, 6, 7, 8])
array = np.array([1,2,3,4,5,6,7,8])
array[array>=2][1:5]
数组([3, 4, 5, 6])
array = np.array([1,2,3,4,5,6,7,8])
array[array>=2][1:5] = [1,1,1,1]
array
数组([1, 2, 3, 4, 5, 6, 7, 8])
当我将 [1:5] 索引更改为 ones 时,它并没有改变它的值...如何在布尔过滤器中更改这些值?
In [246]: arr = np.arange(1,9)
In [247]: mask = arr>=2
In [248]: mask
Out[248]: array([False, True, True, True, True, True, True, True])
arr[mask]
创建一个新数组,一个副本(不是视图)。可以滑动修改,但不影响arr
.
相反,您必须修改 mask
或从中派生的索引。
一种方式:
In [249]: idx = np.nonzero(mask)[0]
In [250]: idx
Out[250]: array([1, 2, 3, 4, 5, 6, 7])
In [251]: arr[idx[1:5]]
Out[251]: array([3, 4, 5, 6])
In [252]: arr[idx[1:5]] = 1
In [253]: arr
Out[253]: array([1, 2, 1, 1, 1, 1, 7, 8])
[252] 只有一个索引操作,所以赋值有效。
如果需要,我可以讨论 array[array>=2][1:5] = [1,1,1,1]
如何评估为单独的获取和设置操作。
当我尝试对布尔过滤的 numpy 数组进行切片时,它并没有改变它的值。 请看
array = np.array([1,2,3,4,5,6,7,8])
array[array>=2]
数组([2, 3, 4, 5, 6, 7, 8])
array = np.array([1,2,3,4,5,6,7,8])
array[array>=2][1:5]
数组([3, 4, 5, 6])
array = np.array([1,2,3,4,5,6,7,8])
array[array>=2][1:5] = [1,1,1,1]
array
数组([1, 2, 3, 4, 5, 6, 7, 8])
当我将 [1:5] 索引更改为 ones 时,它并没有改变它的值...如何在布尔过滤器中更改这些值?
In [246]: arr = np.arange(1,9)
In [247]: mask = arr>=2
In [248]: mask
Out[248]: array([False, True, True, True, True, True, True, True])
arr[mask]
创建一个新数组,一个副本(不是视图)。可以滑动修改,但不影响arr
.
相反,您必须修改 mask
或从中派生的索引。
一种方式:
In [249]: idx = np.nonzero(mask)[0]
In [250]: idx
Out[250]: array([1, 2, 3, 4, 5, 6, 7])
In [251]: arr[idx[1:5]]
Out[251]: array([3, 4, 5, 6])
In [252]: arr[idx[1:5]] = 1
In [253]: arr
Out[253]: array([1, 2, 1, 1, 1, 1, 7, 8])
[252] 只有一个索引操作,所以赋值有效。
如果需要,我可以讨论 array[array>=2][1:5] = [1,1,1,1]
如何评估为单独的获取和设置操作。