matrix - 创建所有非零元素设置为一的新矩阵(朱莉娅)
问题描述
我想要一种有效的(矢量化)方法将 julia 中的矩阵操作为新矩阵,其中所有非零元素都是新矩阵中的元素。
例如,我想要这个矩阵
0 3 6 8 0
7 0 2 0 1
0 4 9 1 0
成为
0 1 1 1 0
1 0 1 0 1
0 1 1 1 0
解决方案
最简单的是将这个矩阵转换成这样的矩阵BitMatrix
:
julia> x = [0 3 6 8 0
7 0 2 0 1
0 4 9 1 0]
3×5 Matrix{Int64}:
0 3 6 8 0
7 0 2 0 1
0 4 9 1 0
julia> x .!= 0
3×5 BitMatrix:
0 1 1 1 0
1 0 1 0 1
0 1 1 1 0
如果您希望矩阵包含Int
值,那么您可以执行以下操作:
julia> Int.(x .!= 0)
3×5 Matrix{Int64}:
0 1 1 1 0
1 0 1 0 1
0 1 1 1 0
最后,如果您的0
值具有混合类型并且您希望“按原样”保留它们,那么您可以这样做:
julia> x = Real[0 3 6 8 UInt8(0)
7 0 2 0 1
0.0 4 9 1 0]
3×5 Matrix{Real}:
0 3 6 8 0x00
7 0 2 0 1
0.0 4 9 1 0
julia> @. ifelse(iszero(x), x, 1)
3×5 Matrix{Real}:
0 1 1 1 0x00
1 0 1 0 1
0.0 1 1 1 0
除了广播之外,您还可以使用理解,这也应该很快。例如。
julia> [v == 0 ? v : 1 for v in x]
3×5 Matrix{Real}:
0 1 1 1 0x00
1 0 1 0 1
0.0 1 1 1 0
或者例如
julia> [ifelse(v == 0, 0, 1) for v in x]
3×5 Matrix{Int64}:
0 1 1 1 0
1 0 1 0 1
0 1 1 1 0
推荐阅读
- c# - 从共享点获取 excel 时出错
- java - java Spring RestController错误404或配置和bean服务有问题
- javascript - 从 AXIOS 中的 post 请求中获取错误处理程序数据
- postgresql - 使用 PostgreSQL regex_replace 替换字符串中的多个动态模式
- vba - Visual Basic 以 json 对象格式发送日期时间
- api - oauth 凭据是否应该存储在数据库中?
- ios - SecKeyCreateWithData 返回 'Nil' 错误
- python-3.x - 代码显示在系统上正常工作时未在服务器上定义“sql_connection”
- asciidoc - 如何使用 Asciidoctor 获得文字块的行号?
- python - ModuleNotFoundError:没有名为“src”的模块。从没有 sys.path 的另一个目录导入模块并从现有目录执行它们