visually what I am talking about and how the values need to be generated... they do not represent the actual data you are using but represent 3 arrays with values and how do you generate the inputs from them.
a
array([[1, 4, 1],
[1, 3, 1],
[2, 4, 2]])
b
array([[1, 3, 1],
[2, 4, 2],
[1, 4, 1]])
c
array([[8, 7, 6],
[6, 8, 8],
[6, 8, 7]])
a0 = a.ravel(); b0 = b.ravel(); c0 = c.ravel()
a0, b0, c0
(array([1, 4, 1, 1, 3, 1, 2, 4, 2]),
array([1, 3, 1, 2, 4, 2, 1, 4, 1]),
array([8, 7, 6, 6, 8, 8, 6, 8, 7]))
d = [[a0[i], b0[i], c0[i]] for i in range(0, 9)]
d
[[1, 1, 8],
[4, 3, 7],
[1, 1, 6],
[1, 2, 6],
[3, 4, 8],
[1, 2, 8],
[2, 1, 6],
[4, 4, 8],
[2, 1, 7]]
Which basically means the inputs can be reshaped
d0 = np.asarray(d)
d0.reshape(3,3,3)
array([[[1, 1, 8],
[4, 3, 7],
[1, 1, 6]],
[[1, 2, 6],
[3, 4, 8],
[1, 2, 8]],
[[2, 1, 6],
[4, 4, 8],
[2, 1, 7]]])
So the original inputs from array a, b, c can be reshuffled in a variety of ways, but the formulation of 'd' is probably easier to visualize how to get 3 values for each location ... aka combination, of a, b, and c.
In a practical sense, you would need to find out the plausible combinations of your inputs to produce a 'lookup' table