python - 在 3 维堆栈的每一层上执行 2 维操作

标签 python arrays numpy vectorization

我有一个三维 numpy 数组,例如 RGB 图像。

我想对数组的每一层执行相同的二维操作;例如标准差或总和。

如果不使用for循环,是否有一个简单的numpy或scipy命令来执行操作,返回一个numpy数组?

例如: numpy 数组的三层是:

myArray[:,:,0] = [[1,2],[3,4]] 
myArray[:,:,1] = [[0,0],[1,1]]  
myArray[:,:,2] = [[4,4],[4,4]] 

想象一个命令numpy.sumLayers()

numpy.sumLayers(myArray) = array([[10],[2],[16]])

或类似numpy.standardDeviationLayers()

最佳答案

3D 堆栈的每一层都意味着轴 01axis=2 中的每个索引组合在一起。因此,要解决您的问题,您可以使用 np.sumnp.std沿着轴 0,1,就像这样 -

sum_val = myArray.sum(axis=(0,1))

std_val = myArray.std(axis=(0,1))

您还可以使用np.einsum更有效地执行求和。 -

sum_val = np.einsum('ijk->k',myArray) # k represents axis = 2

示例运行 -

In [11]: myArray
Out[11]: 
array([[[ 1.,  0.,  4.],
        [ 2.,  0.,  4.]],

       [[ 3.,  1.,  4.],
        [ 4.,  1.,  4.]]])

In [12]: myArray.sum(axis=(0,1))
Out[12]: array([ 10.,   2.,  16.])

In [13]: myArray.std(axis=(0,1))
Out[13]: array([ 1.11803399,  0.5       ,  0.        ])

In [14]: np.einsum('ijk->k',myArray)
Out[14]: array([ 10.,   2.,  16.])

关于python - 在 3 维堆栈的每一层上执行 2 维操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32975263/

相关文章:

python - 在numpy中生成一维缩小范围数组

python - 如何将数组项本身转换为数组Python

python - 在python中的指定行/列处合并二维数组(不同维度)

python - numpy - 矩阵多个 3x3 和 100x100x3 数组?

Python MySQLdb 占位符语法

C 数组提取

java - 从数组中拆分字符串的 double 值创建一个集合

python - 如何使用 SMOTE 将合成数据集保存在 CSV 文件中

python - 使用 Python 可视化 LDA 模型

javascript - JavaScript 中的多个 IF 和 ELSE IF