Skip to content

Commit 80a80f9

Browse files
squeezeM
Co-Authored-By: StevenWhitaker <[email protected]>
1 parent 11595c0 commit 80a80f9

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

examples/usage_Matrices_and_Arrays.jl

+11
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,14 @@ mHCat1 = horzcatM(ones(3, 3), zeros(3, 3)) # [ones(3, 3) zeros(3, 3)]
116116
################################################################
117117
mVCat1 = vertcatM(ones(3, 3), zeros(3, 3)) # [ones(3, 3); zeros(3, 3)]
118118
################################################################
119+
################################################################
120+
A1 = ones(2, 1, 2); # 3 dimensional
121+
mSqueeze1 = squeezeM(A1) # [1 1; 1 1]
122+
123+
A2 = zeros(1, 4, 1);
124+
A2[:, 1:4, ] = [5; 3; 6; 0]
125+
mSqueeze2 = squeezeM(A2) # When it gets one dimensional, it is vertical.
126+
127+
mSqueeze2 == [5; 3; 6; 0] # true
128+
mSqueeze2 == [5 3 6 0] # false
129+
################################################################

src/Language_Fundamentals/Matrices_and_Arrays.jl

+29-1
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ mCat3 = catM(1, ones(3, 3), zeros(3, 3), 2 * ones(3, 3)) # [ones(3, 3); zeros(3,
287287
mCat4 = catM(3, ones(2, 2, 2), zeros(2, 2, 2)) # [ones(2, 2, 2) zeros(2, 2, 2)]
288288
```
289289
"""
290-
catM(dim::Integer, A...)= cat(A...; dims=dim)
290+
catM(dim::Integer, A...) = cat(A...; dims = dim)
291291
################################################################
292292
"""
293293
horzcatM(A1, A2, …)
@@ -311,3 +311,31 @@ mVCat1 = vertcatM(ones(3, 3), zeros(3, 3)) # [ones(3, 3); zeros(3, 3)]
311311
"""
312312
const vertcatM = vcat
313313
################################################################
314+
################################################################
315+
316+
"""
317+
squeezeM(A)
318+
319+
Drops all of the singleton dimensions of `A` (dimensions that are 1).
320+
If `A` contains only one element (i.e., all of its dimensions are singletons) then the output will be a zero-dimensional array.
321+
322+
If you know the dimension that you want to drop, use dropdims(A ; dims= dimensionsToRemove).
323+
324+
Only use this function if you don't know the dimensions that you want to remove, and you are sure that you are not removing important dimensions, and if you don't care about type stability.
325+
326+
Returns an array containing the same data as `A` but with no singleton dimensions; note that `arr` is NOT a copy of `A`, i.e., modifying the contents of `arr` will modify the contents of `A`. To get a copy use copy(arr).
327+
328+
# Examples
329+
```julia
330+
A1 = ones(2, 1, 2); # 3 dimensional
331+
mSqueeze1 = squeezeM(A1) # [1 1; 1 1]
332+
333+
A2 = zeros(1, 4, 1);
334+
A2[:, 1:4, ] = [5; 3; 6; 0]
335+
mSqueeze2 = squeezeM(A2) # When it gets one dimensional, it is vertical.
336+
337+
mSqueeze2 == [5; 3; 6; 0] # true
338+
mSqueeze2 == [5 3 6 0] # false
339+
```
340+
"""
341+
squeezeM(A::AbstractArray) = dropdims(A, dims = Tuple(findall(size(A) .== 1)))

src/MatLang.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ include("Language_Fundamentals/Entering_Commands.jl")
55

66
using LinearAlgebra
77

8-
export zerosM, onesM, randM, eyeM, diagM, blkdiagM, catM, horzcatM, vertcatM
8+
export zerosM, onesM, randM, eyeM, diagM, blkdiagM, catM, horzcatM, vertcatM, squeezeM
99
include("Language_Fundamentals/Matrices_and_Arrays.jl")
1010

1111

test/runtests.jl

+1
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,5 @@ end
3838
@test blkdiagM(ones(2, 4), 2 * ones(3, 2)) == [ones(2, 4) zeros(2, 2); zeros(3, 4) 2 * ones(3, 2)]
3939
@test catM(1, ones(3, 3), zeros(3, 3), 2 * ones(3, 3)) == [ones(3, 3); zeros(3, 3); 2 * ones(3, 3)]
4040
@test horzcatM(ones(3, 3), zeros(3, 3)) == [ones(3, 3) zeros(3, 3)]
41+
@test squeezeM(ones(2,1,2)) == [1 1; 1 1]
4142
end

0 commit comments

Comments
 (0)