Cos*_*pel 9 python numpy vector matrix
我有两个1d向量(在某些情况下它们也可以是2d矩阵).我找到了点积的点函数,但是如果我想将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.
Run Code Online (Sandbox Code Playgroud)
而且我想做
c = a.dot(b)
c.shape = (10,21)
Run Code Online (Sandbox Code Playgroud)
有什么想法怎么做?我试过转置功能,但它不起作用.
Dan*_*iel 28
让我们从两个数组开始:
>>> a
array([0, 1, 2, 3, 4])
>>> b
array([5, 6, 7])
Run Code Online (Sandbox Code Playgroud)
转置任一数组都不起作用,因为它只有1D-没有任何转置,而是需要添加一个新轴:
>>> b.T
array([5, 6, 7])
>>> b[:,None]
array([[5],
[6],
[7]])
Run Code Online (Sandbox Code Playgroud)
要让dot产品按图所示工作,您必须做一些令人费解的事情:
>>> np.dot(a[:,None],b[None,:])
array([[ 0, 0, 0],
[ 5, 6, 7],
[10, 12, 14],
[15, 18, 21],
[20, 24, 28]])
Run Code Online (Sandbox Code Playgroud)
你可以依靠广播而不是dot:
a[:,None]*b
Run Code Online (Sandbox Code Playgroud)
或者你可以简单地使用外部:
np.outer(a,b)
Run Code Online (Sandbox Code Playgroud)
所有三个选项都返回相同的结果.
你可能也对这样的事情感兴趣,这样每个矢量总是一个2D数组:
np.dot(np.atleast_2d(a).T, np.atleast_2d(b))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14521 次 |
| 最近记录: |