我正在尝试通过进行像x
这样的矩阵乘法来从大小为2的向量x * x^T
创建2x2数组:
>>> x = np.array([2, 2])
>>> x
array([2, 2])
>>> np.matmul(x,x.T)
8
如您所见,这失败了。我想出了这个解决方案:
>>> m = np.matrix(x)
>>> m
matrix([[2, 2]])
>>> m.T
matrix([[2],
[2]])
>>> np.matmul(m.T, m)
matrix([[4, 4],
[4, 4]])
达到我想要的目标。但是,有没有更好的方法(最好不要使用np.matrix
?)?
编辑:由于问题之外的上下文,因此无法创建2x1向量。
答案 0 :(得分:2)
使用np.outer
:
np.outer(x, x)
# array([[4, 4],
# [4, 4]])
或者,increase x
's dimension by 1在致电np.matmul
之前:
x = x[:, None] # x = x.reshape(-1, 1)
x.shape
# (2, 1)
x @ x.T # (2,1) . (1,2) => (2,2)
# array([[4, 4],
# [4, 4]])
答案 1 :(得分:0)
如果调整了x
的形状,则可以使用@
运算符进行乘法:
x = np.array([2, 2])
Xprime = x.reshape(len(x), 1)
print(Xprime @ Xprime.T)
#[[4 4]
# [4 4]]
答案 2 :(得分:0)
np.array([2, 2])
不会创建2x1向量,而是创建2向量。如果需要2x1矩阵,则需要np.array([[2], [2]])
。或者,您可以使用np.array([[2, 2]])
创建1x2矩阵,然后执行np.matmul(x.T,x)
答案 3 :(得分:0)
您在这里没有2x1向量,而是1D向量。您可以通过以下方式看到它:
> x = np.array([[2, 2]])
> x.shape
(1,2)
要实际创建2x1向量,请添加bracets:
> np.matmul(x.T,x)
array([[4, 4],
[4, 4]])
现在您拥有了想要的东西:
x.T@x
或const path = require('path');
module.exports = {
target: 'node',
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'build')
},
module: {
rules: [
{
test: /\.js?$/,
loader: 'babel-loader',
exclude: /node_modules/,
options: {
presets: [
'react',
'stage-0',
['env', { targets: { browsers: ['last 2 versions']}}]
]
}
}
]
}
}
在Python3中。