|    134     return sum(v)/prod(size(v)) | 
   134     return sum(v)/prod(size(v)) | 
|    135 end | 
   135 end | 
|    136  | 
   136  | 
|    137 @inline function proj_norm₂₁ball!(y, α) | 
   137 @inline function proj_norm₂₁ball!(y, α) | 
|    138     α²=α*α | 
   138     α²=α*α | 
|    139     y′=reshape(y, (size(y, 1), prod(size(y)[2:end]))) | 
        | 
|    140  | 
   139  | 
|    141     @inbounds @simd for i=1:size(y′, 2)# in CartesianIndices(size(y)[2:end]) | 
   140     if ndims(y)==3 && size(y, 1)==2 | 
|    142         n² = norm₂²(@view(y′[:, i])) | 
   141         @inbounds for i=1:size(y, 2) | 
|    143         if n²>α² | 
   142             @simd for j=1:size(y, 3) | 
|    144             y′[:, i] .*= (α/√n²) | 
   143                 n² = y[1,i,j]*y[1,i,j]+y[2,i,j]*y[2,i,j] | 
|         | 
   144                 if n²>α² | 
|         | 
   145                     v = α/√n² | 
|         | 
   146                     y[1, i, j] *= v | 
|         | 
   147                     y[2, i, j] *= v | 
|         | 
   148                 end | 
|         | 
   149             end | 
|         | 
   150         end | 
|         | 
   151     else | 
|         | 
   152         y′=reshape(y, (size(y, 1), prod(size(y)[2:end]))) | 
|         | 
   153  | 
|         | 
   154         @inbounds @simd for i=1:size(y′, 2)# in CartesianIndices(size(y)[2:end]) | 
|         | 
   155             n² = norm₂²(@view(y′[:, i])) | 
|         | 
   156             if n²>α² | 
|         | 
   157                 y′[:, i] .*= (α/√n²) | 
|         | 
   158             end | 
|    145         end | 
   159         end | 
|    146     end | 
   160     end | 
|    147 end | 
   161 end | 
|    148  | 
   162  | 
|    149 end # Module | 
   163 end # Module |