当前位置:K88软件开发文章中心编程语言非主流编程语言Julia → 文章内容

Julia 多维数组

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-15 16:28:18

96234 0.666232 0.509423 0.660788 0.493501 0.0565622 0.118392 0.493498 0.262048 0.940693 0.252965 0.0470779 0.736979 0.264822 0.228787 0.161441 0.897023 0.567641 0.343935 0.32327 0.795673 0.452242 0.468819 0.628507 0.511528 0.935597 0.991511 0.571297 0.74485 … 0.84589 0.178834 0.284413 0.160706 0.672252 0.133158 0.65554 0.371826 0.770628 0.0531208 0.306617 0.836126 0.301198 0.0224702 0.39344 0.0370205 0.536062 0.890947 0.168877 0.32002 0.486136 0.096078 0.172048 0.77672 0.507762 0.573567 0.220124 0.165816 0.211049 0.433277 0.539476 julia> b = sub(a, 2:2:8,2:2:4) 4x2 SubArray{Float64,2,Array{Float64,2},(StepRange{Int64,Int64},StepRange{Int64,Int64})}: 0.537192 0.996234 0.736979 0.228787 0.991511 0.74485 0.836126 0.0224702 julia> (q,r) = qr(b); julia> q 4x2 Array{Float64,2}: -0.338809 0.78934 -0.464815 -0.230274 -0.625349 0.194538 -0.527347 -0.534856 julia> r 2x2 Array{Float64,2}: -1.58553 -0.921517 0.0 0.866567稀疏矩阵稀疏矩阵是其元素大部分为 0 的矩阵。列压缩(CSC)存储Julia 中,稀疏矩阵使用 列压缩(CSC)格式。Julia 稀疏矩阵的类型为 SparseMatrixCSC{Tv,Ti} ,其中 Tv 是非零元素的类型, Ti 是整数类型,存储列指针和行索引: type SparseMatrixCSC{Tv,Ti<:Integer} <: AbstractSparseMatrix{Tv,Ti} m::Int # Number of rows n::Int # Number of columns colptr::Vector{Ti} # Column i is in colptr[i]:(colptr[i+1]-1) rowval::Vector{Ti} # Row values of nonzeros nzval::Vector{Tv} # Nonzero values end列压缩存储便于按列简单快速地存取稀疏矩阵的元素,但按行存取则较慢。把非零值插入 CSC 结构等运算,都比较慢,这是因为稀疏矩阵中,在所插入元素后面的元素,都要逐一移位。如果你从其他地方获得的数据是 CSC 格式储存的,想用 Julia 来读取,应确保它的序号从 1 开始索引。每一列中的行索引值应该是排好序的。如果你的 SparseMatrixCSC 对象包含未排序的行索引值,对它们进行排序的最快的方法是转置两次。有时,在 SparseMatrixCSC 中存储一些零值,后面的运算比较方便。 Base 中允许这种行为(但是不保证在操作中会一直保留这些零值)。这些被存储的零被许多函数认为是非零值。nnz 函数返回稀疏数据结构中存储的元素数目,包括被存储的零。要想得到准确的非零元素的数目,请使用 countnz 函数,它挨个检查每个元素的值(因此它的时间复杂度不再是常数,而是与元素数目成正比)。构造稀疏矩阵稠密矩阵有 zeros 和 eye 函数,稀疏矩阵对应的函数,在函数名前加 sp 前缀即可: julia> spzeros(3,5) 3x5 sparse matrix with 0 Float64 entries: julia> speye(3,5) 3x5 sparse matrix with 3 Float64 entries: [1, 1] = 1.0 [2, 2] = 1.0 [3, 3] = 1.0sparse 函数是比较常用的构造稀疏矩阵的方法。它输入行索引 I ,列索引向量 J ,以及非零值向量 V 。 sparse(I,J,V) 构造一个满足 S[I[k], J[k]] = V[k] 的稀疏矩阵: julia> I = [1, 4, 3, 5]; J = [4, 7, 18, 9]; V = [1, 2, -5, 3]; julia> S = sparse(I,J,V) 5x18 sparse matrix with 4 Int64 entries: [1 , 4] = 1 [4 , 7] = 2 [5 , 9] = 3 [3 , 18] = -5与 sparse 相反的函数为 findn ,它返回构造稀疏矩阵时的输入: julia> findn(S) ([1,4,5,3],[4,7,9,18]) julia> findnz(S) ([1,4,5,3],[4,7,9,18],[1,2,3,-5])另一个构造稀疏矩阵的方法是,使用 sparse 函数将稠密矩阵转换为稀疏矩阵: julia> sparse(eye(5)) 5x5 sparse matrix with 5 Float64 entries: [1, 1] = 1.0 [2, 2] = 1.0 [3, 3] = 1.0 [4, 4] = 1.0 [5, 5] = 1.0可以使用 dense 或 full 函数做逆操作。 issparse 函数可用来检查矩阵是否稀疏: julia> issparse(speye(5)) true稀疏矩阵运算稠密矩阵的算术运算也可以用在稀疏矩阵上。对稀疏矩阵进行赋值运算,是比较费资源的。大多数情况下,建议使用 findnz 函数把稀疏矩阵转换为 (I,J,V) 格式,在非零数或者稠密向量 (I,J,V) 的结构上做运算,最后再重构回稀疏矩阵。稠密矩阵和稀疏矩阵函数对应关系接下来的表格列出了内置的稀疏矩阵的函数, 及其对应的稠密矩阵的函数。通常,稀疏矩阵的函数,要么返回与输入稀疏矩阵 S 同样的稀疏度,要么返回 d 稠密度,例如矩阵的每个元素是非零的概率为 d 。详见可以标准库文档的 stdlib-sparse 章节。稀疏矩阵稠密矩阵说明spzeros(m,n)zeros(m,n)构造 m x n 的全 0 矩阵 (spzeros(m,n) 是空矩阵)spones(S)ones(m,n)构造的全 1 矩阵 与稠密版本的不同, spones 的稀疏 度与 S 相同speye(n)eye(n)构造 m x n 的单位矩阵full(S)sparse(A)转换为稀疏矩阵和稠密矩阵sprand(m,n,d)rand(m,n)构造 m-by-n 的随机矩阵(稠密度为 d ) 独立同分布的非零元素在 [0, 1] 内均匀分布sprandn(m,n,d)randn(m,n)构造 m-by-n 的随机矩阵(稠密度为 d ) 独立同分布的非零元素满足标准正 态(高斯)分布sprandn(m,n,d,X)randn(m,n,X)构造 m-by-n 的随机矩阵(稠密度为 d ) 独立同分布的非零元素满足 X 分 布。(需要 Distributions 扩展包)sprandbool(m,n,d)randbool(m,n)构造 m-by-n 的随机矩阵(稠密度为 d ) ,非零 Bool元素的概率为 *d* (randbool 中 d =0.5 )

上一页  [1] [2] [3] 


Julia 多维数组