Python 除一个维度外的所有维度的缩减操作

Python 除一个维度外的所有维度的缩减操作,python,arrays,numpy,Python,Arrays,Numpy,我有一个多维布尔numpy数组,例如 import numpy a = numpy.random.rand(7, 7, 3) < 0.1 如果a在最后一个维度中很长,那么Python循环会非常慢 关于如何将其矢量化的任何提示?我们可以使用axisparam。因此,对于3D数组来说,跳过最后一个数组是- a.all(axis=(0,1)) 要处理通用数量的维数数组并沿所有轴执行numpy.all操作(指定轴除外),实现如下所示- def numpy_all_except_one(a,

我有一个多维布尔numpy数组,例如

import numpy

a = numpy.random.rand(7, 7, 3) < 0.1
如果
a
在最后一个维度中很长,那么Python循环会非常慢


关于如何将其矢量化的任何提示?

我们可以使用
axis
param。因此,对于
3D
数组来说,跳过最后一个数组是-

a.all(axis=(0,1))
要处理通用数量的维数数组并沿所有轴执行
numpy.all
操作(指定轴除外),实现如下所示-

def numpy_all_except_one(a, axis=-1):
    axes = np.arange(a.ndim)
    axes = np.delete(axes, axis)
    return np.all(a, axis=tuple(axes))
运行示例以测试所有轴-

In [90]: a = numpy.random.rand(7, 7, 3) < 0.99

In [91]: a.all(axis=(0,1))
Out[91]: array([False, False,  True], dtype=bool)

In [92]: numpy_all_except_one(a) # By default skips last axis
Out[92]: array([False, False,  True], dtype=bool)

In [93]: a.all(axis=(0,2))
Out[93]: array([ True, False,  True,  True,  True,  True,  True], dtype=bool)

In [94]: numpy_all_except_one(a, axis=1)
Out[94]: array([ True, False,  True,  True,  True,  True,  True], dtype=bool)

In [95]: a.all(axis=(1,2))
Out[95]: array([False,  True,  True, False,  True,  True,  True], dtype=bool)

In [96]: numpy_all_except_one(a, axis=0)
Out[96]: array([False,  True,  True, False,  True,  True,  True], dtype=bool)
[90]中的
a=numpy.random.rand(7,7,3)<0.99
在[91]中:a.all(轴=(0,1))
Out[91]:数组([False,False,True],dtype=bool)
在[92]中:numpy_all_,除了_one(a)#默认情况下跳过最后一个轴
Out[92]:数组([False,False,True],dtype=bool)
在[93]中:a.all(轴=(0,2))
Out[93]:数组([True,False,True,True,True,True],dtype=bool)
在[94]中:除一(a,轴=1)之外的所有
Out[94]:数组([True,False,True,True,True,True],dtype=bool)
在[95]中:a.all(轴=(1,2))
Out[95]:数组([False,True,True,False,True,True],dtype=bool)
[96]中:除一个(a,轴=0)之外的所有
Out[96]:数组([False,True,True,False,True,True],dtype=bool)
In [90]: a = numpy.random.rand(7, 7, 3) < 0.99

In [91]: a.all(axis=(0,1))
Out[91]: array([False, False,  True], dtype=bool)

In [92]: numpy_all_except_one(a) # By default skips last axis
Out[92]: array([False, False,  True], dtype=bool)

In [93]: a.all(axis=(0,2))
Out[93]: array([ True, False,  True,  True,  True,  True,  True], dtype=bool)

In [94]: numpy_all_except_one(a, axis=1)
Out[94]: array([ True, False,  True,  True,  True,  True,  True], dtype=bool)

In [95]: a.all(axis=(1,2))
Out[95]: array([False,  True,  True, False,  True,  True,  True], dtype=bool)

In [96]: numpy_all_except_one(a, axis=0)
Out[96]: array([False,  True,  True, False,  True,  True,  True], dtype=bool)