Giter VIP home page Giter VIP logo

Comments (2)

S-Dafarra avatar S-Dafarra commented on June 20, 2024

It would be nice to maintain interoperability with Eigen. Eigen uses std::complex as a type for complex arrays (https://eigen.tuxfamily.org/dox/classEigen_1_1ComplexEigenSolver.html#a3604c99a69fac3bee42c88cb2b589143), while matio has its own type: https://github.com/tbeu/matio/blob/master/src/matio.h#L164-L167.
Moreover, the data in the matvar_t is not stored as an array of a pair of numbers, but rather the real and imaginary parts are two separate vectors. Hence, I think we cannot have matioCpp::Vector<std::complex<double>> since we cannot cast the internal data to std::complex<double>* as it would be required by data().

An alternative might be to specialize all the code relative to Element, Vector, VectorIterator and MultiDimensionalArray just for complex types, but this would require reimplementing (and testing) basically half of the codebase.

Still investigating possible alternatives.

from matio-cpp.

S-Dafarra avatar S-Dafarra commented on June 20, 2024

I just spotted this from https://en.cppreference.com/w/cpp/numeric/complex:

In order to satisfy the requirements of array-oriented access, an implementation is constrained to store the real and imaginary components of a std::complex specialization in separate and adjacent memory locations. Possible declarations for its non-static data members include:

  • an array of type value_type[2], with the first element holding the real component and the second element holding the imaginary component (e.g. Microsoft Visual Studio)

Hence, I wonder if is possible to convert a mat_complex_split_t to a std::complex<T*>. In this case, the pointer type of Vector would be std::complex<T*>*. Nevertheless, I would still need some ad-hoc element accessors for retrieving a specific element or reference, and an ad-hoc iterator, but the code of Vector, Element and MultiDimensionalArray might remain the same.

from matio-cpp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.