是否可以在Julia中重塑稀疏数组?
我试图在Julia中重塑稀疏数组,但这样做会出错。有可能吗?如果是,怎么做 一些挫折的快照:是否可以在Julia中重塑稀疏数组?,julia,sparse-matrix,Julia,Sparse Matrix,我试图在Julia中重塑稀疏数组,但这样做会出错。有可能吗?如果是,怎么做 一些挫折的快照: julia> A = sparse([1, 2, 3], [1, 2, 3], [1, 2, 3]) 3×3 SparseMatrixCSC{Int64,Int64} with 3 stored entries: [1, 1] = 1 [2, 2] = 2 [3, 3] = 3 julia> reshape(A, (5, 5)) ERROR: DimensionMi
julia> A = sparse([1, 2, 3], [1, 2, 3], [1, 2, 3])
3×3 SparseMatrixCSC{Int64,Int64} with 3 stored entries:
[1, 1] = 1
[2, 2] = 2
[3, 3] = 3
julia> reshape(A, (5, 5))
ERROR: DimensionMismatch("parent has 9 elements, which is incompatible with size (5, 5)")
Stacktrace:
我还尝试了调整大小!(A,4*4),但似乎没有任何效果。同样,我们非常感谢您的帮助
编辑:我应该更清楚,我想专门调整数组的大小,以便在3x3范围之外添加更多元素(在示例代码中)。例如,
A[4,4]=1
当前不起作用。您可以使用创建一个新的稀疏数组
julia> i, j, v = findnz(A)
([1, 2, 3], [1, 2, 3], [1, 2, 3])
julia> sparse(i, j, v, 5, 5)
5×5 SparseMatrixCSC{Int64, Int64} with 3 stored entries:
1 ⋅ ⋅ ⋅ ⋅
⋅ 2 ⋅ ⋅ ⋅
⋅ ⋅ 3 ⋅ ⋅
⋅ ⋅ ⋅ ⋅ ⋅
⋅ ⋅ ⋅ ⋅ ⋅
sparse
的反方向是findnz
,它检索用于创建稀疏数组的输入。看
(编辑,只是要注意,我的输出与您的不同,因为我在撰写本文时使用了Julia v1.6(发布候选1或
rc1
),它有一个非常酷的新show
稀疏矩阵方法。)当您将包含n个元素的矩阵重塑为包含不同数量元素的矩阵时,您希望得到什么结果?reformate
的思想不是改变而是移动元素,例如reformate(A,9,1)
工作我更新了我的问题,以展示我真正想要实现的目标。你看过这个吗:?
julia> J = Base.ReshapedArray(A, (4, 4), ())
4×4 reshape(::SparseMatrixCSC{Int64,Int64}, 4, 4) with eltype Int64:
1 2 3 #undef
0 0 #undef #undef
0 0 #undef #undef
0 0 #undef #undef
julia> J[4, 4] = 4
ERROR: BoundsError: attempt to access 3×3 SparseMatrixCSC{Int64,Int64} at index [1, 6]
Stacktrace:
julia> i, j, v = findnz(A)
([1, 2, 3], [1, 2, 3], [1, 2, 3])
julia> sparse(i, j, v, 5, 5)
5×5 SparseMatrixCSC{Int64, Int64} with 3 stored entries:
1 ⋅ ⋅ ⋅ ⋅
⋅ 2 ⋅ ⋅ ⋅
⋅ ⋅ 3 ⋅ ⋅
⋅ ⋅ ⋅ ⋅ ⋅
⋅ ⋅ ⋅ ⋅ ⋅