python - 将值分配给由多个条件定义的数组的子集
问题描述
我想将值分配给由多个条件指定的数组的一部分。
例如:
import numpy as np
temp = np.arange(120).reshape((2,3,4,5))
mask = temp > 22
submask = temp[mask] < 43
(temp[mask])[submask] = 0 # assign zeros to the part of the array specified via mask and submask
print(temp) # notice that temp is unchanged - I want it to be changed
这个例子是人为的。一般来说,我想做一些更复杂的事情,包括索引和布尔掩码的组合。在类似情况下使用列表索引会失败。例如:temp[:,:,0,[1,3,2]]=0
是一个有效的分配,但temp[:,:,0,[1,3,2]][mask]=0
会失败。
我的理解是分配失败,因为复杂的索引提示 numpy 复制数组对象并分配给它,而不是原始数组。所以并不是分配本身失败,只是分配指向“错误”的对象。
我曾尝试使用诸如np.copyto
and之类的函数,np.putmask
但这些函数也失败了,大概是因为后端实现模仿了原始问题。例如:np.putmask(temp, mask, 0)
会工作但np.putmask(temp[mask], submask, 0)
不会。
有什么好方法可以做我想做的事吗?
解决方案
推荐阅读
- r - 使用 ifelse 对数字求和
- python - 使用域名运行 Python 脚本
- android - 在 Image Asset Studio 中创建启动器图标时出现 anydpi-v26 问题
- java - Java SortMap Comparator 在字母键之后排序数字键
- r - 数据框行名布尔解决方案?
- python - 如果用户输入字符串匹配,则删除文本文件中的某一行
- python-3.x - 尝试使用 Gmail API 发送电子邮件
- haskell - 在 macOS 上构建堆栈
- javascript - 使用 svg.js 清除并重新绘制
- abstract-syntax-tree - 评估 CallExpression