@@ -2878,6 +2878,7 @@ end
2878
2878
2879
2879
# Nonscalar A[I,J] = B: Convert B to a SparseMatrixCSC of the appropriate shape first
2880
2880
_to_same_csc (:: AbstractSparseMatrixCSC{Tv, Ti} , V:: AbstractMatrix , I... ) where {Tv,Ti} = convert (SparseMatrixCSC{Tv,Ti}, V)
2881
+ _to_same_csc (:: AbstractSparseMatrixCSC{Tv, Ti} , V:: AbstractMatrix , i:: Integer , J) where {Tv,Ti} = convert (SparseMatrixCSC{Tv,Ti}, reshape (V, (1 , length (J))))
2881
2882
_to_same_csc (:: AbstractSparseMatrixCSC{Tv, Ti} , V:: AbstractVector , I... ) where {Tv,Ti} = convert (SparseMatrixCSC{Tv,Ti}, reshape (V, map (length, I)))
2882
2883
2883
2884
setindex! (A:: AbstractSparseMatrixCSC{Tv} , B:: AbstractVecOrMat , I:: Integer , J:: Integer ) where {Tv} = _setindex_scalar! (A, B, I, J)
@@ -2886,12 +2887,20 @@ function setindex!(A::AbstractSparseMatrixCSC{Tv,Ti}, V::AbstractVecOrMat, Ix::U
2886
2887
require_one_based_indexing (A, V, Ix, Jx)
2887
2888
(I, J) = Base. ensure_indexable (to_indices (A, (Ix, Jx)))
2888
2889
checkbounds (A, I, J)
2889
- Base. setindex_shape_check (V, length (I), length (J))
2890
+ nJ = length (J)
2891
+ Base. setindex_shape_check (V, length (I), nJ)
2890
2892
B = _to_same_csc (A, V, I, J)
2891
2893
2894
+ m, n = size (A)
2895
+ if (! isempty (I) && (I[1 ] < 1 || I[end ] > m)) || (! isempty (J) && (J[1 ] < 1 || J[end ] > n))
2896
+ throw (BoundsError (A, (I, J)))
2897
+ end
2898
+ if isempty (I) || isempty (J)
2899
+ return A
2900
+ end
2901
+
2892
2902
issortedI = issorted (I)
2893
2903
issortedJ = issorted (J)
2894
-
2895
2904
if ! issortedI && ! issortedJ
2896
2905
pI = sortperm (I); @inbounds I = I[pI]
2897
2906
pJ = sortperm (J); @inbounds J = J[pJ]
@@ -2904,20 +2913,6 @@ function setindex!(A::AbstractSparseMatrixCSC{Tv,Ti}, V::AbstractVecOrMat, Ix::U
2904
2913
B = B[:, pJ]
2905
2914
end
2906
2915
2907
- m, n = size (A)
2908
- mB, nB = size (B)
2909
-
2910
- if (! isempty (I) && (I[1 ] < 1 || I[end ] > m)) || (! isempty (J) && (J[1 ] < 1 || J[end ] > n))
2911
- throw (BoundsError (A, (I, J)))
2912
- end
2913
-
2914
- if isempty (I) || isempty (J)
2915
- return A
2916
- end
2917
-
2918
- nI = length (I)
2919
- nJ = length (J)
2920
-
2921
2916
colptrA = getcolptr (A); rowvalA = rowvals (A); nzvalA = nonzeros (A)
2922
2917
colptrB = getcolptr (B); rowvalB = rowvals (B); nzvalB = nonzeros (B)
2923
2918
@@ -2931,7 +2926,6 @@ function setindex!(A::AbstractSparseMatrixCSC{Tv,Ti}, V::AbstractVecOrMat, Ix::U
2931
2926
resize! (nzvalA, nnzS)
2932
2927
2933
2928
colB = 1
2934
- asgn_col = J[colB]
2935
2929
2936
2930
I_asgn = falses (m)
2937
2931
fill! (view (I_asgn, I), true )
0 commit comments