我正在尝试在中构造单位矩阵Julia 1.1
。查看文档后,我发现可以如下计算4x4身份矩阵:
julia> Id4 =1* Matrix(I, 4, 4)
4×4 Array{Int64,2}:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
这是最常用的编码方式,还是更好/更短的编码方式,因为它是经常使用的矩阵?
给定using LinearAlgebra
,表示身份矩阵的最简单的方法是:
I
这个答案看似古怪,但也很深刻。运算符的全部要点I
是,在大多数情况下,用户想要一个单位矩阵,实际上不必实例化该矩阵。
假设您想要一个1000x1000
单位矩阵。当您可以使用时I
,为什么sizeof(I)
还要浪费时间构建整个矩阵,请注意计算结果1
(即对象的大小为1个字节)。Julia的所有函数(包括LinearAlgebra
)都知道是什么I
,并且可以适当地使用它,而不必浪费时间构建它首先表示的实际矩阵。
现在,由于某些原因,您可能需要指定身份矩阵元素的类型。注意:
julia> I
UniformScaling{Bool}
true*I
因此,在这种情况下,您使用的对角线为true
和对角线为非对角线的概念恒等矩阵false
。即使在其他矩阵为Int
或的情况下,在许多情况下也足够了Float64
。在内部,Julia将使用专门针对类型的方法。但是,如果要指定身份矩阵以包含整数或浮点数,请使用:
julia> 1I
UniformScaling{Int64}
1*I
julia> 1.0I
UniformScaling{Float64}
1.0*I
请注意,sizeof(1I)
计算结果为8
,表示该Int64
矩阵成员的名义类型。
还要注意,例如,5I
如果您想5
在对角线和0
其他位置使用名义矩阵,则可以使用。
在某些情况下(这些情况比许多人想象的要少得多),您可能需要实际构建矩阵。在这种情况下,您可以使用例如:
Matrix(1I, 3, 3) #Identity matrix of Int type
Matrix(1.0I, 3, 3) #Identity matrix of Float64 type
Matrix(I, 3, 3) #Identity matrix of Bool type
Bogumil在评论中还指出,如果您不满意在上面的构造函数的第一个参数中暗示输出的类型,则还可以使用(稍微冗长一些):
Matrix{Int}(I, 3, 3) #Identity matrix of Int type
Matrix{Float64}(I, 3, 3) #Identity matrix of Float64 type
Matrix{Bool}(I, 3, 3) #Identity matrix of Bool type
并明确指定类型。
但是实际上,您可能唯一需要执行此操作的时间如下:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句