julia - Julia 中的单位矩阵
问题描述
我正在尝试在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
Bogumił 在评论中还指出,如果您对在上述构造函数的第一个参数中暗示输出的类型感到不舒服,您也可以使用(稍微详细一点):
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
并明确指定类型。
但实际上,您可能需要执行此操作的唯一时间如下:
- 当您想将单位矩阵输入到以输入必须是具体矩阵类型的方式编写的包中的函数中时。
- 当您想从一个单位矩阵开始,然后通过一个或多个转换将其原地变异为其他东西时。
推荐阅读
- symfony - 当我尝试创建新的时,php bin/console make:crud 中有错误
- python - 如何使用 python 在 Windows 10 中进行并行处理
- python - 根据条件语句在熊猫数据框中生成新列
- bash - 如何使用 cat 命令从顶部读取文件?
- javascript - 如何将 JQuery 代码转换为 JavaScript?
- python - 在 Python 中以 1 到 3 范围内的随机重复间隔生成 2 个变量的列表
- node.js - Actions on Google 检查可用手机
- excel - VBA根据excel条件从两个word文档中复制文本
- android - AccessibilityService中的Android onAccessibilityEvent没有被调用
- youtube-iframe-api - Youtube IFrame API 有时不会触发 `onError` 事件