python-3.x - 为什么在布尔过滤数组中切片没有发生..?
问题描述
当我尝试对布尔过滤的 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] 索引更改为索引时,它并没有改变它的值...如何在布尔过滤器中更改这些值。?
解决方案
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]
评估作为单独的 get 和 set 操作。
推荐阅读
- angular - 在打字稿中访问给定属性名称的数组
- oracle - 在 Firefox 或 Chrome 等浏览器上没有任何配置的情况下,如何在 OBIEE 12c 登录页面中忘记密码?
- ios - 科尔多瓦打印机插件不打印
- python - 解释 Python 子集化
- django - django-allauth) 如何从 url 中的访问代码中获取访问令牌?
- react-native - React-Native:通常使用 react-native-image-crop-picker 和 Camera 使用 openCamera 时在 android 上崩溃
- javascript - 'Form' 未定义 react/jsx-no-undef
- coq - 如何在 Coq 中使用多个“0”表示法
- dart - 如何在颤动/飞镖中替换 $ 符号
- python - 使用 Python 3 向 Google 的控制台发送命令