繁体   English   中英

脾气暴躁的dotproduct怪异行为

[英]Numpy dotproduct weird behaviour

我正在使用python3.5,但我有一个问题:为什么np.dot()的行为如此?

>> a = np.array([[1,2,3,4]])
>> b = np.array([123])
>> np.dot(a,b)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: shapes (1,4) and (1,) not aligned: 4 (dim 1) != 1 (dim 0)
>>np.dot(b,a)
array([123, 246, 369, 492])

help(np.dot) ,我们知道np.dot(x,y)x的最后一个轴y的倒数第二个乘积

在的情况下np.dot(a, b)最后轴线a是4和唯一的轴的长度b是1。它们不匹配:失败。

np.dot(b, a)的情况下, np.dot(b, a)的最后一个轴为1, b的倒数第二a为1。它们匹配:成功。

解决方法

根据您对np.dot(a,b)意图,您可能需要:

>>> np.dot(a, np.resize(b,a.shape[-1]))
array([1230])

numpy.dot(x, y)文档中:

对于2-D数组,它等效于矩阵乘法,对于1-D数组,其等效于向量的内积...对于N维,它是x的最后一个轴和y的倒数第二个和的乘积:

因此,您在哪里:

a = np.array([[1,2,3,4]])  # shape is (1, 4), 2-D array (matrix)
b = np.array([123])        # shape is (1,),   1-D array (vector)
  • np.dot(b, a)起作用( (1,) * (1, 4) ,相关尺寸一致)
  • np.dot(a, b)不( (1, 4) * (1,) ,相关尺寸不一致,操作不确定。请注意(1,) “倒数第二个”轴(1,)对应于它的唯一轴)

这与具有两个二维数组(即矩阵)的行为相同:

a = np.array([[1,2,3,4]])  # shape is (1, 4)
b = np.array([[123]])      # shape is (1, 1)
  • np.dot(b, a)起作用( (1, 1) * (1, 4) ,内部矩阵尺寸一致)
  • np.dot(a, b)不( (1, 4) * (1, 1) ,内部矩阵尺寸不一致)

但是,如果您有两个一维数组(即向量),则两种操作均无效:

a = np.array([1,2,3,4])   # shape is (4,)
b = np.array([123])       # shape is (1,)
  • np.dot(b, a)不起作用( (1,) * (4,) ,但是只能为相同长度的向量定义内积)
  • np.dot(a, b)不起作用( (4,) * (1) ,相同)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM