x = np.array([1,2,3])
y = x[:, np.newaxis]
print(x*y)
output:
[[1 2 3]
[2 4 6]
[3 6 9]]
我的问题是,我明白*是元素乘法。x形(3,) y形为(3,1)。我不知道产量是怎么计算出来的。根据我的测试,输出不是 如果我们用x*y或y*x,会有变化。我想这里会发生某种广播,请解释一下 这是怎么回事。你知道吗
另一个问题是
vector_a = np.array([[1, 2, 3], [4, 5, 6]])
b = [1,2, 3]
c = np.dot(vector_a, b)
here c value: [14 32] and shape is (2,).
我知道点是矩阵乘法,这里a形是(2,3),b形是(3,)。在这里 同样,广播发生了,我认为输出形状应该是(2,1),但输出形状显示为(2,) 如何计算?这里c=np.dot公司(b,向量a)作为错误抛出
形状(3,)和(2,3)未对齐:3(dim 0)!=2(尺寸0)
这就是为什么广播不适用。(3,)应该变成(3,2),输出应该是形状(3,3)
请解释一下。你知道吗
谢谢你的时间和帮助
在第一种情况下,广播是:
这两条规则是:
至于
dot
,没有广播;阅读文档了解详细信息。如果两者都是2d,则规则很简单-np.dot(A,B)
,最后一个A与最后一个B匹配,并通过求和消除。你知道吗但是1d阵列得到了特殊的处理,这是有充分证据的。你知道吗
np.matmul/@
确实从扩展和压缩的角度描述了它对一维数组的处理。你知道吗np.dot
并没有用这些术语来描述事物,尽管效果是一样的。你知道吗你知道吗数字.dot(a、b、out=无)
两个数组的点积。具体来说
如果a和b都是一维阵列,则它是向量的内积(没有复共轭)。你知道吗
如果a和b都是二维数组,则是矩阵乘法,但最好使用matmul或a@b。你知道吗
如果a或b是0-D(标量),则相当于乘和使用numpy.乘法(a,b)或a*b是首选。你知道吗
如果a是N-D数组,b是1-D数组,则它是a和b的最后一个轴的和积
如果a是N-D数组,b是M-D数组(其中M>;=2),则它是a的最后一个轴与b的第二个到最后一个轴的和积:
您还可以检查reflink
相关问题 更多 >
编程相关推荐