Types 接受数矩阵的所有向量作为Julia中的函数参数
我正在尝试编写一个函数,它接受矩阵向量并递归计算它们的乘积。函数本身是这样的:Types 接受数矩阵的所有向量作为Julia中的函数参数,types,type-conversion,julia,Types,Type Conversion,Julia,我正在尝试编写一个函数,它接受矩阵向量并递归计算它们的乘积。函数本身是这样的: using LinearAlgebra: I """ Recursively calculates the product of the matrices in a given vector `V`. """ function ∏_(V) if length(V) == 1 return V[1] elseif length
using LinearAlgebra: I
"""
Recursively calculates the product of the matrices in a given vector `V`.
"""
function ∏_(V)
if length(V) == 1
return V[1]
elseif length(V) == 0
UniformScaling(1)
else
V[1] * ∏_(V[2:end])
end
end
这一切都很好,但我想将输入的类型限制为
V::Vector{Matrix{Number}} ,
其中,
Number
可以是任何字段元素(整数、有理数或复数)。我如何使用Julia的类型注释实现这一点?我知道子类型操作符您需要指定V::Vector{您需要指定V::Vector{一般来说,在Julia中过度限制输入类型被认为是不好的形式。尽量使您的类型签名允许,如果您不需要这样做的话(在不同输入的不同实现之间选择),您应该考虑根本不使用类型。
在这种情况下,我可能只使用V::AbstractVector
,让元素成为“支持乘法的任何类型”,甚至没有理由将其限制为Number
s,imho
此外,在这种情况下,您可以只使用prod
,它完全满足您的需要:
∏_(V) = prod(V)
顺便说一句:写I
或LinearAlgebra.I
可能比写UniformScaling(1)更好
。1
参数是一个Int64
,如果它在较低整数的矩阵上运行,例如Int32
,通常,在Julia中过度限制输入类型被认为是不好的形式。如果不需要执行分派,请尽量使类型签名具有许可性(在不同输入的不同实现之间选择),您应该考虑根本不使用类型。
在这种情况下,我可能只使用V::AbstractVector
,让元素成为“支持乘法的任何类型”,甚至没有理由将其限制为Number
s,imho
此外,在这种情况下,您可以只使用prod
,它完全满足您的需要:
∏_(V) = prod(V)
顺便说一句:I
或LinearAlgebra.I
可能比UniformScaling(1)
更好。1
参数是一个Int64
,如果它在较低整数的矩阵上操作,比如Int32
,另一个(等效)选项是使用向量{Matrix{T}}其中T另一个(等价)选项是使用向量{Matrix{T}}其中T
V::AbstractVector{<:AbstractMatrix{<:Number}}
V::AbstractVector{<:AbstractMatrix}
V::AbstractVector
V::Any
∏_(V) = prod(V)