# Named Jacobian

**URL:** <https://discourse.julialang.org/t/named-jacobian/73572>\
**Category:** General Usage\
**Tags:** forwarddiff, namedtuple\
**Created:** [December 24, 2021, 3:33am UTC](https://discourse.julialang.org/t/named-jacobian/73572 "2021-12-24T03:33:01Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Lincoln\_Hannah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lincoln_hannah/32/19198_2.png) [@Lincoln\_Hannah](https://discourse.julialang.org/u/Lincoln_Hannah)\
**Post date:** [December 24, 2021, 3:33am UTC](https://discourse.julialang.org/t/named-jacobian/73572/1 "2021-12-24T03:33:01Z")

</div>

For a function that maps a named tuple to another named tuple, is it possible to get a named Jacobian?  
Either as a named range or a DataFrame with 3 columns: `Input_Var, Output_Var, Derivative`

I could take the ForwardDiff.jacobian output and do something like

```julia
   DataFrame( hcat( input_variable_names, Jacobian ), output_variable_names )

```

but it would be nice to have the names attached automatically.

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [December 24, 2021, 4:54pm UTC](https://discourse.julialang.org/t/named-jacobian/73572/2 "2021-12-24T16:54:46Z")

</div>

Maybe see if `NamedArrays` works with ForwardDiff?

What I do though is use a custom struct to store what I need for a model, then write functions to convert from struct to vector and back again. All the optimization happens with vectors and I convert back to the struct as quickly as possible.

---

<div class="post-metadata">

**Author:** ![Lincoln\_Hannah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lincoln_hannah/32/19198_2.png) [@Lincoln\_Hannah](https://discourse.julialang.org/u/Lincoln_Hannah)\
**Post date:** [January 11, 2022, 4:06am UTC](https://discourse.julialang.org/t/named-jacobian/73572/3 "2022-01-11T04:06:31Z")

</div>

Thanks Peter. That’s roughly what I’m doing with the line above. Converting the Jacobian Matrix to a more structured DataFrame.  
Hope you had a good Christmas and New Years:)

---

<div class="post-metadata">

**Author:** ![Lincoln\_Hannah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lincoln_hannah/32/19198_2.png) [@Lincoln\_Hannah](https://discourse.julialang.org/u/Lincoln_Hannah)\
**Post date:** [March 30, 2022, 3:34am UTC](https://discourse.julialang.org/t/named-jacobian/73572/4 "2022-03-30T03:34:42Z")

</div>

```julia
f(x) = 2x[1,1] + 3x[2,2]
d = DataFrame( A = [0.0,0.0], B = [0.0,0.0] )
M = Matrix( d )

FiniteDiff.finite_difference_gradient!( M, f, M )

```

Given that I can set values in a DataFrame like this `d[:,:] = M`

Could FiniteDiff be enhanced to allow the output to be taken from and written into the DataFrame? e.g.

```julia
FiniteDiff.finite_difference_gradient!( d[:,:], f, d )

```
