维度不匹配:Julia中的问题

4

我创建了一个矩阵A,它是一个300行4列的数组。 在目标函数中,我需要将A*x最小化,其中x是一个1行4列的向量。 以下是我的代码:

k = 3
m = length(u) 
n = k + 1
A = zeros(m,k+1)
for i = 1:m
    for j = 1:k+1
        A[i,j] = u[i]^(k+1-j)
    end
end
display(A)
using JuMP,Gurobi
m = Model(Gurobi.Optimizer)
@variable(m, x[1:k+1])
@objective(m, Min, sum((y - (A*x).^2) ))
optimize!(m)
uopt = value.(x)
println(x)

输出:

DimensionMismatch("dimensions must match")
Stacktrace:
 [1] promote_shape at .\indices.jl:154 [inlined]
 [2] promote_shape at .\indices.jl:145 [inlined]
 [3] -(::Array{Int64,1}, ::Array{GenericQuadExpr{Float64,VariableRef},1}) at .\arraymath.jl:38
\]

欢迎来到StackOverflow!您能否编辑您的问题,让它更具体一些(哪一行引发了错误?也许您可以发布错误输出)。我完全不了解Julia,但这个错误听起来像是对维度错误的向量/矩阵应用操作,因此首先检查您的循环和中断条件。此外,尽可能将复杂的计算分解成几行以便跟踪。祝编码愉快。 :) - randmin
1个回答

5
如果dim(A)=300x4,dim(x)=1x4(从您的问题中获取尺寸),则矩阵乘法A*x的乘积未定义,因为尺寸不匹配。请注意,如果将x更改为4x1的维度,则可以使用,并且结果的维度为300x1。
如果这不能解决您的问题,请查找您代码中的第154行(也可能是第145行),因为尺寸不匹配会在这些行中发生,请检查那些行的代码是否合理。
我实际上没有验证您的代码(而且它似乎不是完整的代码?),我知道有更有能力的人可能会在那里帮助您。无论如何,我希望这有所帮助。
祝编程愉快。

第154行和145行是基本的Julia实现中的红鲱鱼。我最近改进了JuMP宏中的错误消息。真正的问题是y不会是一个长度为300的向量。 - Oscar Dowson
你可能想提到 OP 可能希望 x 是一个由 4 个元素组成的 Vector,而不是一个 Matrix - Oscar Smith
我必须承认,经过将近一年的时间,我仍然不知道Julia是什么或者它是如何工作的^^。我只是在摸索着使用给定的东西,并且很高兴我能帮助到其他人。在我的理解中,一个四元素向量是一个4x1的矩阵,但是在Julia实现这两种数据类型时可能存在差异(?)。正如我所提到的,这方面有更有能力的人。感谢您的提示。 - randmin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接