I don't understand, what Import does with CDF.

If I enter

In[17]:= data = Import[ExampleFile]
Out[17]= {"Pose"}

what I can do with returned object? How can I return Pose entry only?

If I try to specify this as element name as string, I am failing:

In[18]:= data = Import[ExampleFile, "Pose"]

During evaluation of In[18]:= Import::noelem: The Import element "Pose" is not present when importing as NASACDF.

Out[18]= $Failed


I noticed, that it showed entity name in quotes. In notebook it looks different:

enter image description here

i.e. w/o quotes.


Shared example: https://drive.google.com/open?id=0By8pZ9a2478YOGlhZUlRU3VNb28


Apparently Mathematica has a bug here, because the data returned is reshaped incorrectly.

Here is Matlab transcript, reading the same file:

>> data = cdfread(ExampleFile,'Variable', {'Pose'});
>> data = data{1};
>> size(data)

ans =

   992    96

>> data(1,1:5)

ans =

  1×5 single row vector

 -287.2470   64.5002  933.7140 -417.2063   37.0789

>> data(1:5,1)

ans =

  5×1 single column vector


An here is Mathematicas:

In[47]:= data = Import[ExampleFile, "Elements"]
data = Import[ExampleFile, "Data"];
data[[1, 1, 1, 1]]

Out[47]= {"Annotations", "Data", "DataEncoding", "DataFormat", \
"Datasets", "Metadata"}

Out[49]= {1, 1, 992, 96}

Out[50]= -287.247

data[[1, 1, 1, Range[5]]]

Out[54]= {-287.247, -287.696, -288.126, -288.574, -288.996}

In[55]:= data[[1, 1, Range[5], 1]]

Out[55]= {-287.247, -497.341, -378.209, -376.513, -370.388}

I.e. although Mathematica indicates the similar shape of data, i.t. fills that shape in different way.

I.e. what Matlab cosiders as row, Mathematica considers as column, and what Mathematica considers as column, is unknown.

So, I still need instructions if I am incorrectly operating with Mathematica's ND arrays, or, if it is Mathematica bug, I need to know, how to recover from it.


For now I see the following way to recover original data from corrupted one:

dims = Dimensions[data]
data = ArrayReshape[
   data, {dims[[1]], dims[[2]], dims[[4]], dims[[3]]}];
data = Transpose[data, {1, 2, 4, 3}];
  • 1
    $\begingroup$ Can you upload the CDF somewhere? $\endgroup$ – J. M.'s ennui Aug 18 '17 at 12:57
  • $\begingroup$ @J.M. sorry, it is from closed repository. But it is normal, I can read it with Python and get some numeric array with shape (X, Y, Z) $\endgroup$ – Dims Aug 18 '17 at 12:59
  • $\begingroup$ @Kuba extension is CDF $\endgroup$ – Dims Aug 18 '17 at 13:06
  • 1
    $\begingroup$ Oh, so it is not a computable data format but a common data format. $\endgroup$ – Kuba Aug 18 '17 at 13:16
  • 1
    $\begingroup$ Your file is in Common Data Format. That is not the Mathematica CDF-format (Computable Document Format). Unfortunately, there are several standards that use CDF as file extension (see here). $\endgroup$ – Henrik Schumacher Aug 18 '17 at 13:20

In WL this format is known as NASACDF

In doubt you can always import "Elements" and try each one:

Import["Posing.cdf", "Elements"]
{"Annotations", "Data", "DataEncoding", "DataFormat", "Datasets", "Metadata"}
Import["Posing.cdf", "Data"]

enter image description here

Initially returned {"Pose"} was a list of datasets stored in a file. You can extract specific dataset via:

 Import["Posing.cdf", {"Datasets", "Pose"}]

All that and more can of course be learned from linked documentation page.

  • $\begingroup$ Wow, that is easy! $\endgroup$ – Dims Aug 18 '17 at 13:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.