Comments (2)
I think this might actually be a bug in numpy itself. Or the documentation is unclear, and I've screwed something up. Either way, I'll ask the numpy developers about this, but for now I'll give you a workaround (or two).
Workaround
You can get around this problem by simply converting the quaternion
array to a float
array when saving, and back when loading. You would change the relevant lines above to
np.save(filename, quaternion.as_float_array(qarray))
and
quaternion.as_quat_array(np.load(filename))
This trick will always work, even if I do manage to fix the more obvious way of using save
/load
.
Rescuing data
Don't use this method going forward, but if you've already saved a file from some big procedure that you can't or don't care to reproduce, you can salvage the file by editing it (test.npy
in your original example) using a good text editor like emacs or (I assume) vim. The first line of the file will contain something like
{'descr': '<q32', 'fortran_order': False, 'shape': (2,), }
Change that to something like
{'descr': '<f8', 'fortran_order': False, 'shape': (2, 4), }
That is, change <q32
to <f8
and add a 4 at the end of the shape
. When you load that again, you'll have an array of float
s, which you can convert back to quaternion
s using quaternion.as_quat_array
.
from quaternion.
This problem is "solved" in the sense that save
and load
will now do something. Unfortunately, numpy has no way of saving the fact that these are our particular type of user-defined type — quaternions — so you have to tell it the type when you load the data back in. The array you get back after load
ing will have dtype void
, but you can change that by taking another view of the same data. For example, the following code works correctly:
import numpy as np
import quaternion
a = quaternion.as_quat_array(np.random.rand(5,3,4))
np.save("test.npy", a)
b = np.load("test.npy").view(dtype=np.quaternion)
np.array_equal(a, b) # returns `True`
Note the .view(dtype=np.quaternion)
where it's loaded.
from quaternion.
Related Issues (20)
- [2022.2.9.19.55.57] Numpy compatibility with Linux wheel HOT 3
- Add a function to rotate vector with a quaternion HOT 6
- Error while running quaternion.as_rotation_matrix HOT 1
- None check fails HOT 1
- angular_velocity() output format HOT 2
- Euler angles are horrible, and so are quaternions HOT 2
- Documentation should clarify that the quaternions are defined using an active rotation convention HOT 2
- `np.sum` breaks in latest Numpy
- Object mode fallback deprecation in numba.jit
- Version number of latest release HOT 1
- Add a rotation example into the documentation HOT 1
- possible docstring error HOT 2
- add from_euler_angles equivalent for Tait-Bryan angles HOT 1
- slight improvement to "Why Euler angles are horrible"
- Identity decorator exception HOT 1
- Scalar quaternion objects are mutable HOT 1
- `cumprod()` with quaternions crashes HOT 5
- Computation Error: from euler angles to quaternion HOT 1
- Build problem on arm32v7 HOT 2
- Numpy 2.0 support HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from quaternion.