Python 如何将3D矩阵的(W*H)求和并存储在长度=深度(输入矩阵的第三维)的一维矩阵中
我想将3D矩阵的所有元素(W*H)相加,并将其存储在一维矩阵中,长度=深度(输入矩阵的第三维) 我要说清楚: 以(W*H*D)的形式输入尺寸=1D。 所需输出再次为1D,长度为DPython 如何将3D矩阵的(W*H)求和并存储在长度=深度(输入矩阵的第三维)的一维矩阵中,python,python-2.7,Python,Python 2.7,我想将3D矩阵的所有元素(W*H)相加,并将其存储在一维矩阵中,长度=深度(输入矩阵的第三维) 我要说清楚: 以(W*H*D)的形式输入尺寸=1D。 所需输出再次为1D,长度为D 让我们考虑下面的3D矩阵:2×3×2。 Layer 1 Layer 2 [1, 2, 3 [7, 8, 9 4, 5, 6] 10, 11, 12] 输出为1D:[21,57] 我是python新手,我这样写: def test(w, h, c, image_inp):
让我们考虑下面的3D矩阵:2×3×2。
Layer 1 Layer 2
[1, 2, 3 [7, 8, 9
4, 5, 6] 10, 11, 12]
输出为1D:[21,57]
我是python新手,我这样写:
def test(w, h, c, image_inp):
output = [image_inp[j * w + k] for i in enumerate(image_inp)
for j in range(0,h)
for k in range(0,w)
#image_inp[j * w + k] comment
]
printout(output)
>>> img3d[0,:,:]
array([[1, 2, 3],
[4, 5, 6]])
我知道这会将输入数组原样复制到输出数组。
此外,输出数组长度不等于深度
有人请帮我把这个弄对
def test(w, h, c, image_inp):
output = [hwsum for i in enumerate(image_inp)
hwsum += wsum for j in range(0,h)
wsum += image_inp[j*w + k] for k in range(0,w)
#image_inp[j * w + k]
]
print "Calling outprint"
printout(output)
注意:我不想使用numpy(它正在工作)或任何数学库。
原因是我正在用python编写测试代码来评估一种正在使用的语言
编辑:
输入矩阵将以1D的形式输入测试函数,w、h、c作为参数,
因此,其形式如下:
[1,2,3,4,5,6,7,8,9,10,12],
with w, h, c have to compute considering input1D as 3D matrix.
如果您的矩阵是按照您的帖子所暗示的那样设置的,并且您的“3D”矩阵是一个数组,则表示感谢:
M = [ [1, 2, 3,
4, 5, 6],
[ 7, 8, 9,
10,11,12],
]
array_of_sums = []
for pseudo_2D_matrix in M:
array_of_sums.append(sum(pseudo_2D_matrix))
如果三维矩阵作为真实三维对象设置为:
M = [
[ [ 1, 2, 3],
[ 4, 5, 6]
],
[ [ 7, 8, 9],
[10,11,12],
]
您可以通过执行以下操作创建一维和数组:
array_of_sums = []
for 2D_matrix in M:
s = 0
for row in 2D_matrix:
s += sum(row)
array_of_sums.append(s)
您的数据是如何格式化的还不清楚,但希望您能从这两个示例中了解到这一点
编辑:
根据对输入的澄清,您可以轻松完成以下任务:
如果尺寸w、h、c
作为数组[1,2,3,4,5,6,7,8,9,10,12]
的尺寸分段给出,则您只需将这些区域分界并基于此求和:
input_array = [1,2,3,4,5,6,7,8,9,10,11,12]
w,h,c = 2,3,2
array_of_sums = []
i = 0
while i < w:
array_of_sums.append(sum(input_array[i*h*c:(i+1)*h*c]))
i += 1
如果您的矩阵设置为您的帖子所暗示的矩阵,则将“3D”矩阵设置为数组:
M = [ [1, 2, 3,
4, 5, 6],
[ 7, 8, 9,
10,11,12],
]
array_of_sums = []
for pseudo_2D_matrix in M:
array_of_sums.append(sum(pseudo_2D_matrix))
如果三维矩阵作为真实三维对象设置为:
M = [
[ [ 1, 2, 3],
[ 4, 5, 6]
],
[ [ 7, 8, 9],
[10,11,12],
]
您可以通过执行以下操作创建一维和数组:
array_of_sums = []
for 2D_matrix in M:
s = 0
for row in 2D_matrix:
s += sum(row)
array_of_sums.append(s)
您的数据是如何格式化的还不清楚,但希望您能从这两个示例中了解到这一点
编辑:
根据对输入的澄清,您可以轻松完成以下任务:
如果尺寸w、h、c
作为数组[1,2,3,4,5,6,7,8,9,10,12]
的尺寸分段给出,则您只需将这些区域分界并基于此求和:
input_array = [1,2,3,4,5,6,7,8,9,10,11,12]
w,h,c = 2,3,2
array_of_sums = []
i = 0
while i < w:
array_of_sums.append(sum(input_array[i*h*c:(i+1)*h*c]))
i += 1
非常适合于对一维和多维数据进行切片和操作。它速度快,使用方便,非常“pythonic”
按照您的示例,您只需执行以下操作:
>>> import numpy
>>> img3d=numpy.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,12,12]]])
>>> img3d.shape
(2, 2, 3)
您可以在这里看到img3d有2个层、2行和3列。您可以像这样使用索引进行切片:
def test(w, h, c, image_inp):
output = [image_inp[j * w + k] for i in enumerate(image_inp)
for j in range(0,h)
for k in range(0,w)
#image_inp[j * w + k] comment
]
printout(output)
>>> img3d[0,:,:]
array([[1, 2, 3],
[4, 5, 6]])
要从3D转换为1D,只需使用:
相反,使用:
现在添加jusing numpy.sum,给出要添加的维度(在您的示例中,维度1和2(维度为0索引):
仅用一行代码进行总结,您可以执行以下操作(问题中的变量名):
从:
numpy.sum
sum(a,axis=None,dtype=None,out=None,keepdims=numpy.\u globals.\u NoValue>)
给定轴上数组元素的总和
参数:
a:要求和的类数组元素
轴:无或int或
整数元组,可选轴或沿其执行求和的轴。
默认值axis=None将对输入的所有元素求和
数组。如果轴为负,则从最后一个轴到第一个轴计数
版本1.7.0中新增:如果axis是整数的元组,则执行求和
在元组中指定的所有轴上,而不是在单个轴或
所有的轴都和以前一样
非常适合于对单个和多维数据进行切片和操作。它速度快,易于使用,非常“pythonic”
按照您的示例,您只需执行以下操作:
>>> import numpy
>>> img3d=numpy.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,12,12]]])
>>> img3d.shape
(2, 2, 3)
您可以在这里看到img3d有2层、2行和3列。您可以使用如下索引进行切片:
def test(w, h, c, image_inp):
output = [image_inp[j * w + k] for i in enumerate(image_inp)
for j in range(0,h)
for k in range(0,w)
#image_inp[j * w + k] comment
]
printout(output)
>>> img3d[0,:,:]
array([[1, 2, 3],
[4, 5, 6]])
要从3D转换为1D,只需使用:
相反,使用:
现在添加jusing numpy.sum,给出要添加的维度(在您的示例中,维度1和2(维度为0索引):
仅用一行代码进行总结,您可以执行以下操作(问题中的变量名):
从:
numpy.sum
sum(a,axis=None,dtype=None,out=None,keepdims=numpy.\u globals.\u NoValue>)
给定轴上数组元素的总和
参数:
a:要求和的类数组元素
轴:无或int或
整数元组,可选轴或沿其执行求和的轴。
默认值axis=None将对输入的所有元素求和
数组。如果轴为负,则从最后一个轴到第一个轴计数
版本1.7.0中新增:如果axis是整数的元组,则执行求和
在元组中指定的所有轴上,而不是在单个轴或
所有的轴都和以前一样
如果每一层只是一个列表,你能不能对每一层使用
sum
?@ScottHunter,输入不是一个列表,它是1D数组,必须计算1D,将其视为3D矩阵,提供w,h,c@kzs:调整我的答案以考虑1D输入数组。列表和1D数组(在Python中)有什么区别?如果每一层只是一个列表,你能不能对每一层使用sum
。@ScottHunter,输入不是一个列表,它是1D数组,必须计算1D,将其视为3D矩阵,提供w,h,c@kzs:调整我的答案以考虑1D输入数组。列表和1D数组(在Python中)有什么区别?我已在编辑部分更新了输入矩阵的详细信息。您所解释的方法是针对二维、三维矩阵的。我忘记了前面提到的输入。@kzs查看我的编辑,我根据您的输入添加了一个建议。@kzs很高兴它起到了作用。我修复了代码中的一些拼写错误,并添加了一个大大简化的方法。我已更新了详细信息编辑部分输入矩阵的ails。您解释的方法适用于2D、3D matr