gpt4 book ai didi

methods - 为什么 eye(size(X)) (其中 X 是某个数组)会抛出错误?

转载 作者:行者123 更新时间:2023-12-02 06:56:46 24 4
gpt4 key购买 nike

为什么可以用

X = randn(size(Y));

X = eye(size(Y,1), size(Y,2));

但不是

X = eye(size(Y));

?它抛出以下错误,我不太明白:

ERROR: eye has no method matching eye(::(Int64,Int64))

最佳答案

错误

ERROR: eye has no method matching eye(::(Int64,Int64))

应该提示您了解问题的性质。如有疑问,请查看函数的方法并检查类型是否与其中任何一个一致。

眼睛方法

您可以通过调用 methods 列出为 eye 提供的方法:

julia> methods(eye)
# 7 methods for generic function "eye":
eye{T}(::Type{Diagonal{T}},n::Int64) at linalg/diagonal.jl:92
eye(T::Type{T<:Top},m::Integer,n::Integer) at array.jl:176
eye(m::Integer,n::Integer) at array.jl:182
eye(T::Type{T<:Top},n::Integer) at array.jl:183
eye(n::Integer) at array.jl:184
eye(S::SparseMatrixCSC{Tv,Ti<:Integer}) at sparse/sparsematrix.jl:413
eye{T}(x::AbstractArray{T,2}) at array.jl:185

类型是否一致?

首先,让我们生成一些随机数据:

julia> Y=rand(3,3)
3x3 Array{Float64,2}:
0.323068 0.759352 0.684859
0.357021 0.0706659 0.78324
0.128993 0.763624 0.458284

那么,为什么 eye(size(Y,1), size(Y,2)) 有效?因为size(Y,1)size(Y,2)都是Int64类型,

julia> typeof(size(Y,1))
Int64

julia> typeof(size(Y,2))
Int64

Integer 的子类型,

julia> Int64 <: Integer
true

eye 提供了一个方法,该方法需要两个Integer 类型的参数:

eye(m::Integer,n::Integer)

为什么 eye(size(Y)) 不起作用?因为 size 返回一对,

julia> typeof(size(Y))
(Int64,Int64)

eye 没有提供将一对作为参数的方法。

与柯里化(Currying)的关系

你需要的是一个函数 f 使得

f(eye)(size(Y))

相当于

eye(size(Y,1), size(Y,2))

你可以说 funcurry 眼睛。不幸的是,Julia 开发者有 no plans to introduce such a function .

解决方案

无论如何,你把事情搞得太复杂了。这里不需要使用size;只需将 eye 应用于数组 Y 即可产生所需的结果:

julia> eye(Y)
3x3 Array{Float64,2}:
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0

关于methods - 为什么 eye(size(X)) (其中 X 是某个数组)会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29634802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com