Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 一维数组在numpy中的乘法_Python_Numpy_Matrix_Vector - Fatal编程技术网

Python 一维数组在numpy中的乘法

Python 一维数组在numpy中的乘法,python,numpy,matrix,vector,Python,Numpy,Matrix,Vector,我有两个一维向量(在某些情况下,它们也可以是二维矩阵)。 我找到了点积的点函数,但是如果我想用这些形状乘以a.dot(b): a = [1,0.2,...] a.shape = (10,) b = [2.3,4,...] b.shape = (21,) a.dot(b) and I get ValueError: matrices not aligned. 我想做什么 c = a.dot(b) c.shape = (10,21) 有什么办法吗?我也尝试了转置函数,但它不起作用。让我们从两个数

我有两个一维向量(在某些情况下,它们也可以是二维矩阵)。 我找到了点积的点函数,但是如果我想用这些形状乘以a.dot(b):

a = [1,0.2,...]
a.shape = (10,)
b = [2.3,4,...]
b.shape = (21,)
a.dot(b) and I get ValueError: matrices not aligned.
我想做什么

c = a.dot(b)
c.shape = (10,21)

有什么办法吗?我也尝试了转置函数,但它不起作用。

让我们从两个数组开始:

>>> a
array([0, 1, 2, 3, 4])
>>> b
array([5, 6, 7])
转置任一阵列都不起作用,因为它只有1D-没有什么可转置的,而是需要添加一个新轴:

>>> b.T
array([5, 6, 7])
>>> b[:,None]
array([[5],
       [6],
       [7]])
要使点积如图所示工作,您必须执行一些复杂的操作:

>>> np.dot(a[:,None],b[None,:])
array([[ 0,  0,  0],
       [ 5,  6,  7],
       [10, 12, 14],
       [15, 18, 21],
       [20, 24, 28]])
您可以依靠广播而不是
dot

a[:,None]*b
或者您可以简单地使用外部:

np.outer(a,b)
这三个选项都返回相同的结果

您可能还对以下内容感兴趣,以便每个向量始终是二维数组:

np.dot(np.atleast_2d(a).T, np.atleast_2d(b))

更简单的方法是如下定义数组:

 >>>b = numpy.array([[1,2,3]]) 
>>> b = numpy.array([1,2,3])
>>> b.reshape(1,3).T
array([[1],
       [2],
       [3]])
然后,您可以轻松地转换阵列:

 >>>b.T
 array([[1],
        [2],
        [3]])
你也可以做乘法运算:

 >>>b@b.T
 [[1 2 3]
 [2 4 6]
 [3 6 9]]
另一种方法是强制重塑向量,如下所示:

 >>>b = numpy.array([[1,2,3]]) 
>>> b = numpy.array([1,2,3])
>>> b.reshape(1,3).T
array([[1],
       [2],
       [3]])

我希望能够调用simple.dot函数,因为现在我必须区分一维向量和矩阵。@Cospel看到我更新的答案,可能会对您有所帮助。它所做的只是抽象出if语句,但它可以将问题简化为一行。第三个例子是元素乘法,而不是点积。结果应该是
[[14]]
,或者输入应该是
>>b*b.T