我想通过将一个向量与它的trasposed进行乘法来做矩阵或数的逆,但它给了我一个错误。
v=[1,2,3]
inv(v'*v)
`inv` has no method matching inv(::Array{Int64,1})
while loading In[45], in expression starting on line 2
我想在最后获得一个数字或方阵。 我不想使用pinv函数,因为我需要做进一步的操作,我需要一个数字或方形矩阵。 如何解决这个问题?提前致谢
答案 0 :(得分:4)
v
是一个3元素的向量,v'*v
是一个1元素的向量:
julia> v = [1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> v'*v
1-element Array{Int64,1}:
14
您无法反转矢量。如果您想计算v
与自身的标量点积,可以使用dot
函数,然后使用inv
将其反转:
julia> dot(v,v)
14
julia> inv(dot(v,v))
0.07142857142857142
答案 1 :(得分:0)
这是在问了问题很长时间之后才出现的,但也许对某人有用。详细说明:
[1, 2, 3]
是向量或一维向量(类型为Array{Int64,1}
或Vector{Int64}
)[1 2 3]
是1x3矩阵(类型为Array{Int64,2}
)[1 2 3]'
(本质上)是3x1矩阵(类型Array{Int64,2}
)。这不是很正确,它确实是它的一个懒惰(未评估)版本,但它会按应有的方式运行因此,您可以实现以下目标:
v = [1 2 3]
display(v' * v)
inv(v' * v)
这现在由于正确的原因而失败:-),即3x3矩阵不可逆。
顺便说一句,您可以将v
类型和长度Vector{T}
类型的向量n
转换成{{1}类型的Array{T,2}
类型的n×1数组}。