Python 如何在numpy中筛选三维数组
我知道这是numpy最简单的任务之一,但我不明白。我有一个数组:Python 如何在numpy中筛选三维数组,python,numpy,Python,Numpy,我知道这是numpy最简单的任务之一,但我不明白。我有一个数组: import numpy as np u1 = np.array([[[-2.04853845, -1.47283101, 1. ], [-2.05009646, -1.46780913, 1. ], [-2.05165539, -1.46278426, 1. ]], [[-4.94165
import numpy as np
u1 = np.array([[[-2.04853845, -1.47283101, 1. ],
[-2.05009646, -1.46780913, 1. ],
[-2.05165539, -1.46278426, 1. ]],
[[-4.94165412, 7.8524744 , 1. ],
[ 0.94540647, 0.86456925, 1. ],
[-4.94916228, 7.87667525, 1. ]]])
u1是矩阵的摘要。矩阵的实际大小为:
u1.shape
(813, 1200, 3)
我想得到最后一个数组(最后一个维度)的第一个和第二个元素介于0和1之间的所有值,所以我得到了包含布尔值的和数组,这样我就可以索引具有相同形状的另一个数组
我打赌这是一个重复的问题,但我没有找到它。谢谢,您正在寻找以下信息:
将numpy导入为np
u1=np.数组([-2.04853845,-1.47283101,1.],
[-2.05009646, -1.46780913, 1.],
[-2.05165539, -1.46278426, 1.]],
[[-4.94165412, 7.8524744, 1.],
[ 0.94540647, 0.86456925, 1.],
[-4.94916228, 7.87667525, 1.]]])
np.logical_和(u1[:,:,0:2]>0,u1[:,:,0:2]提取元素并与值进行比较:
import numpy as np
u1 = np.array([[[-2.04853845, -1.47283101, 1. ],
[-2.05009646, -1.46780913, 1. ],
[-2.05165539, -1.46278426, 1. ]],
[[-4.94165412, 7.8524744 , 1. ],
[ 0.94540647, 0.86456925, 1. ],
[-4.94916228, 7.87667525, 1. ]]])
first = (u1[:, :, 0] > 0) * (u1[:, :, 0] < 1)
second = (u1[:, :, 1] > 0) * (u1[:, :, 1] < 1)
condition = first * second
# Condition is:
# [[False False False]
# [False True False]]
定义以下函数检查行的前2个元素:
def myfunc(row):
return np.logical_and(row[0:2] >= 0, row[0:2] <= 1).all()
对于示例数据,结果是:
array([[False, False, False],
[False, True, False]])
到目前为止,您尝试了什么?您阅读了numpy文档吗?是的,但我没有找到我需要的内容。似乎我需要使用np.logical_和(),无论如何,谢谢numpy文档非常优秀,请参阅您案例中的“索引”一节:
np.apply_along_axis( myfunc, axis=-1, arr=u1 )
array([[False, False, False],
[False, True, False]])