如果我跑:
x = np.zeros(6)
y = np.zeros([7, 6])
z = y * x
然后一切正常,没有Python错误。你知道吗
但是,我使用的Python模块(calliffoo)包含一个函数(callifbar),它返回一个7x6numpy数组。它的形状与上面的y
相同,数据类型也相同(float64)。但当我运行以下命令时:
x = np.zeros(6)
y = foo.bar()
z = y * x
我得到以下错误:
ValueError: shapes (7,6) and (1,6) not aligned: 6 (dim 1) != 1 (dim 0)
但据我所知,y
在这两个示例中是完全相同的格式,具有相同的形状和数据类型。是什么导致了这个错误,为什么在第一个例子中不是这样的呢?你知道吗
这里我们做的是元素乘法,a(7,6)和a(6,)。通过广播,(6,)变成(1,6),然后(7,6)来匹配
y
。你知道吗显然,在
foo.bar
情况下,y
是np.matrix
子类:注意
y1
的不同显示:用
np.matrix
*
定义为np.dot
,矩阵积。x
也被转换成np.matrix
,产生(1,6)矩阵。错误信息来自矩阵乘法的定义。你知道吗np.multiply
可以用来强制按元素进行乘法。请注意结果的类别:因为这样的混乱
np.matrix
正在被劝阻。你知道吗我不知道您运行的是哪个版本,但我运行的是Python3上的1.16.3版本。你知道吗
在我看来,您对
x
的定义与示例片段中的不同。你似乎把它定义为一个6x1矩阵,而不是一个“向量”,它在Numpy上被认为只有一个维度。尝试将y
乘以np.zeros([6,1])
,您将看到一个错误。你知道吗底线是:
.shape
属性,它在执行矩阵乘法时非常有用。你知道吗相关问题 更多 >
编程相关推荐