Numpy报”ValueError:all the input arrays must have same number of dimensions “的原因以及解决办法

yizhihongxing

问题描述

在使用Numpy时,当我们试图对维度不同的数组做某些操作(如加、减、乘等),通常会遇到这个错误提示:

"ValueError: all the input arrays must have same number of dimensions"

意思是所有输入的数组必须具有相同的维度。

解释一下,例如以下代码:

import numpy as np

a = np.array([1,2,3])
b = np.array([[1,2],[3,4]])
c = np.array([5,6])

d = a + b + c

print(d)

运行代码后输出如下错误:

ValueError: all the input arrays must have same number of dimensions

原因分析

导致这个问题的原因是Numpy中的广播规则(Broadcasting Rule)。

在给定两个数组的形状时,如果它们的尺寸不相等,则必须满足以下条件之一:

1.其中一个数组的所有轴中长度为1;

2.两个数组在某个轴中长度相等。

如果这些条件都不满足,则会引发”ValueError: all the input arrays must have same number of dimensions”异常。

例如,在上面的代码中,a和c均为一维数组,而b为二维数组,因此在进行加法运算时会出现维度不匹配的错误。

解决办法

针对这种情况,我们可以使用Numpy中的reshape函数对数组进行转换,使其维度相同,并满足广播规则。

例如,我们可以将a和c的维度调整为(3,1)的二维数组,即:

import numpy as np

a = np.array([1,2,3]).reshape(3,1)
b = np.array([[1,2],[3,4]])
c = np.array([5,6]).reshape(2,1)

d = a + b + c

print(d)

输出结果为:

[[ 7  8]
 [ 9 10]]

我们也可以直接使用Numpy的broadcast函数,这个函数会自动将不匹配的维度扩展为相同的维度,再进行运算。

例如,我们可以使用以下方式解决上面的问题:

import numpy as np

a = np.array([1,2,3])
b = np.array([[1,2],[3,4]])
c = np.array([5,6])

d = np.broadcast_arrays(a.reshape(3,1),b,c.reshape(2,1))
result = d[0] + d[1] + d[2]

print(result)

输出结果为:

[[ 7  8]
 [ 9 10]]

除此之外,还可以使用transpose函数或者np.newaxis属性将不匹配的维度转换为匹配的维度,再进行运算。

例如,我们可以使用以下方式解决上面的问题:

import numpy as np

a = np.array([1,2,3])
b = np.array([[1,2],[3,4]])
c = np.array([5,6])

d = a[:,np.newaxis] + b + c[:,np.newaxis]

print(d)

输出结果为:

[[ 7  8]
 [ 9 10]]

总结

在使用Numpy进行数组运算时,要注意数组的维度是否匹配,如果出现维度不匹配的情况,可以使用reshape函数、broadcast函数、transpose函数等方法将维度转换为匹配的维度,从而避免出现"ValueError: all the input arrays must have same number of dimensions"错误。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Numpy报”ValueError:all the input arrays must have same number of dimensions “的原因以及解决办法 - Python技术站

(0)
上一篇 2023年3月16日
下一篇 2023年3月16日

相关文章

合作推广
合作推广
分享本页
返回顶部