Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 形状(2,)(3,1)的Numpy点覆盖给出错误,但乘法不';T_Python_Numpy_Matrix Multiplication - Fatal编程技术网

Python 形状(2,)(3,1)的Numpy点覆盖给出错误,但乘法不';T

Python 形状(2,)(3,1)的Numpy点覆盖给出错误,但乘法不';T,python,numpy,matrix-multiplication,Python,Numpy,Matrix Multiplication,我想澄清一下广播规则和乘法因子上的numpy.dot方法。我已经创建了两个形状(2,)和(3,)的数组,它们可以通过添加一个新轴(3,1形状)来相乘,但即使添加一个新轴并转换为(3,1)形状,也无法通过np.dot方法实现。下面是一个小测试 x_1 = np.random.rand(2,) print(x_1) x_2 = np.random.rand(3,) print(x_2) > [ 0.48362051 0.55892736] > [ 0.16988562 0.0907

我想澄清一下广播规则和乘法因子上的numpy.dot方法。我已经创建了两个形状(2,)和(3,)的数组,它们可以通过添加一个新轴(3,1形状)来相乘,但即使添加一个新轴并转换为(3,1)形状,也无法通过np.dot方法实现。下面是一个小测试

x_1 = np.random.rand(2,) 
print(x_1)
x_2 = np.random.rand(3,)
print(x_2)
> [ 0.48362051  0.55892736]
> [ 0.16988562  0.09078386  0.04844093]

x_8 = np.dot(x_1, x_2[:, np.newaxis])
> ValueError: shapes (2,) and (3,1) not aligned: 2 (dim 0) != 3 (dim 0)

x_9 = x_1 * x_2[:, np.newaxis]
print(x_9)
> [[ 0.47231067  0.30899592]
  [ 0.17436521  0.11407352]
  [ 0.01312074  0.00858387]]

x__7 = x_1[:, np.newaxis] * x_2[:, np.newaxis]
> ValueError: operands could not be broadcast together with shapes (2,1) (3,1) 

我理解(2,1)和(1,3)的np.dot是有效的,但为什么(2,1)和(3,1)不行呢?因为广播规则第二条说,当其中一个是1时,两个维度是相容的。所以,如果其中一个维度是1,np.dot应该起作用,或者我对第二条规则理解错了吗?这也是为什么X_9(乘法)有效,而X_8(np.dot)无效,因为两者的形状相同。

np.dot用于矩阵乘法(其中列向量可以被视为一列矩阵,行向量可以被视为一行矩阵)。 *(乘法)在参数之一为标量的情况下用于标量乘法,反之亦然。因此,广播规则不适用于np.dot。 x_9之所以有效,是因为正如这里的广播规则所述

在两个阵列上操作时,NumPy会按元素比较它们的形状。它从后面的维度开始,然后继续前进。当需要时,两个维度是兼容的

  • 他们是平等的,或者
  • 其中一个是1

  • 因此,x_1的(唯一)维度(即2)与x_2的最后一个维度(即1,因为添加了新维度)兼容,而剩余维度为3

    广播
    规则不适用于
    dot
    。您希望
    dot
    如何处理2个1d阵列?或者使用已扩展为2d的2?内积?Outter?@hpaulj我所研究的方程,δ=wf(h)试图得到内积。最后是一个标量值。所以我打算在numpy乘法上使用np.dot方法,以便更好地理解应该在哪里使用np.dot和numpy乘法。对此有何建议/经验?谢谢,我在广播文档中没有发现np.dot不适用于它们。“在数学中,点积或标量积是一种代数运算,它接受两个等长的数字序列(通常是坐标向量),并从wiki返回一个数字。请注意
    等长
    规格。