python - 如何提取与满足条件的原始数组相同维度的数组?
问题描述
这个问题听起来很基本。但是当我尝试在 numpy 数组上使用where
orboolean
条件时,它总是返回一个扁平数组。
我有 NumPy 数组
P = array([[ 0.49530662, 0.07901 , -0.19012371],
[ 0.1421513 , 0.48607405, -0.20315014],
[ 0.76467375, 0.16479826, -0.56598029],
[ 0.53530718, -0.21166188, -0.08773241]])
我想提取只有负值的数组,但是当我尝试
P[P<0]
array([-0.19012371, -0.41421612, -0.20315014, -0.56598029, -0.21166188,
-0.08773241, -0.09241335])
P[np.where(P<0)]
array([-0.19012371, -0.41421612, -0.20315014, -0.56598029, -0.21166188,
-0.08773241, -0.09241335])
我得到一个扁平的数组。如何提取表单的数组
array([[ 0, 0, -0.19012371],
[ 0 , 0, -0.20315014],
[ 0, 0, -0.56598029],
[ 0, -0.21166188, -0.08773241]])
我不想创建一个临时数组,然后使用类似的东西Temp[Temp>=0] = 0
解决方案
由于您的需求是:
我想“提取”只有负值的数组
您可以使用numpy.where()
您的条件(检查负值),它可以保留数组的维度,如下例所示:
In [61]: np.where(P<0, P, 0)
Out[61]:
array([[ 0. , 0. , -0.19012371],
[ 0. , 0. , -0.20315014],
[ 0. , 0. , -0.56598029],
[ 0. , -0.21166188, -0.08773241]])
P
你的输入数组在哪里。
另一个想法可能是numpy.zeros_like()
用于初始化相同的形状数组并numpy.where()
收集我们的条件满足的索引。
# initialize our result array with zeros
In [106]: non_positives = np.zeros_like(P)
# gather the indices where our condition is obeyed
In [107]: idxs = np.where(P < 0)
# copy the negative values to correct indices
In [108]: non_positives[idxs] = P[idxs]
In [109]: non_positives
Out[109]:
array([[ 0. , 0. , -0.19012371],
[ 0. , 0. , -0.20315014],
[ 0. , 0. , -0.56598029],
[ 0. , -0.21166188, -0.08773241]])
另一个想法是简单地使用准系统API,如果我们省略kwarg numpy.clip()
,它将返回一个新数组。out=
In [22]: np.clip(P, -np.inf, 0) # P.clip(-np.inf, 0)
Out[22]:
array([[ 0. , 0. , -0.19012371],
[ 0. , 0. , -0.20315014],
[ 0. , 0. , -0.56598029],
[ 0. , -0.21166188, -0.08773241]])
推荐阅读
- python - 通过 Python tcp 套接字传输以阿拉伯语为标题的文件时出现 ValueError
- c# - 在我的情况下,显式实现不起作用
- java - 在嵌套的 json 字符串中附加双引号 - Java
- python-3.x - Python:进程 VS 线程。仅运行 1 个进度/线程时有什么区别
- django - Nginx 权限
- swift - Swift:使用正则表达式检查前缀
- java - Comparable 和 Comaprator 接口
- azure-devops - 如何将测试用例从 Excel 导入 VSTS/Azure DevOps
- typescript - 提取联合类型中的属性类型
- python - 从 df.columns 中删除非连续重复项