-
-
Notifications
You must be signed in to change notification settings - Fork 69
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Convention for output of tuples #708
Comments
I think the issue is that both of these things (tuples of arrays and arrays of tuples) can themselves appear in a Stan program. Keeping the convention that the first index is samples and then everything is is as-written in Stan makes these cases clearer, but this is indeed at the expense of the ease of slicing "down" a single tuple. I'd personally recommend that if a user knows they care about looking at all of the |
I would say that numpy structured dtype would be our best option? |
Structured dtypes don't really help this as far as I can tell: >>> import numpy as np
>>> x = np.array([(1.2, 3.4), (4.5, 6.5)], dtype='f,f')
>>> x[:,1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed I've also found that they are not as easy to use in other ways ( stanio can now optionally give you a structured dtype'd array when you're dealing with tuples, so we could pipe that option through to the user of cmdstanpy, but I think it addresses a different set of issues |
Ah, there an option using structured dtypes: >>> import numpy as np
>>> x = np.array([(1.2, 3.4), (4.5, 6.5)], dtype='f,f')
>>> x.dtype
dtype([('f0', '<f4'), ('f1', '<f4')]) # note the names f0 and f1
>>> x['f0']
array([1.2, 4.5], dtype=float32) This seems like it would get arbitrarily bad as you nest tuples, but I guess it works in theory |
In the
develop
branch, tuples generated by Stan programs are one-dimensional arrays of tuples. This can make it difficult to access elements of tuples. For example, consider the following test.Then accessing
c.1
samples is only possible through list comprehension (there may be some fancy indexing I'm not familiar with).Would it make sense to return a tuple of arrays rather than an array of tuples? This would allow accessing samples more easily, e.g., in the above example we'd get
This would however go against the convention that the first index refers to samples.
The text was updated successfully, but these errors were encountered: