Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F65109743
compress_shape.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, May 31, 21:25
Size
1 KB
Mime Type
text/x-python
Expires
Sun, Jun 2, 21:25 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
18005357
Attached To
rPYPULSEQ pypulseq
compress_shape.py
View Options
from
types
import
SimpleNamespace
import
numpy
as
np
def
compress_shape
(
decompressed_shape
:
np
.
ndarray
)
->
np
.
ndarray
:
"""
Returns a run-length encoded compressed shape.
Parameters
----------
decompressed_shape : numpy.ndarray
Decompressed shape.
Returns
-------
compressed_shape : SimpleNamespace
A `SimpleNamespace` object containing the compressed data and corresponding shape.
"""
quant_factor
=
1e-7
decompressed_shape_scaled
=
decompressed_shape
/
quant_factor
datq
=
np
.
round
(
np
.
insert
(
np
.
diff
(
decompressed_shape_scaled
),
0
,
decompressed_shape_scaled
[
0
]))
qerr
=
decompressed_shape_scaled
-
np
.
cumsum
(
datq
)
qcor
=
np
.
insert
(
np
.
diff
(
np
.
round
(
qerr
)),
0
,
0
)
datd
=
datq
+
qcor
mask_changes
=
np
.
insert
(
np
.
asarray
(
np
.
diff
(
datd
)
!=
0
,
dtype
=
np
.
int
),
0
,
1
)
vals
=
datd
[
mask_changes
.
nonzero
()[
0
]]
*
quant_factor
k
=
np
.
append
(
mask_changes
,
1
)
.
nonzero
()[
0
]
n
=
np
.
diff
(
k
)
n_extra
=
(
n
-
2
)
.
astype
(
np
.
float32
)
# Cast as float for nan assignment to work
vals2
=
np
.
copy
(
vals
)
vals2
[
n_extra
<
0
]
=
np
.
nan
n_extra
[
n_extra
<
0
]
=
np
.
nan
v
=
np
.
stack
((
vals
,
vals2
,
n_extra
))
v
=
v
.
T
[
np
.
isfinite
(
v
)
.
T
]
# Use transposes to match Matlab's Fortran indexing order
v
[
abs
(
v
)
<
1e-10
]
=
0
compressed_shape
=
SimpleNamespace
()
compressed_shape
.
num_samples
=
len
(
decompressed_shape
)
compressed_shape
.
data
=
v
return
compressed_shape
Event Timeline
Log In to Comment