Skip to main content
edited title
Link
FooBar
  • 193
  • 1
  • 8

Shortening repetitive code Similar manipulations on several numpy arrays

Source Link
FooBar
  • 193
  • 1
  • 8

Shortening repetitive code

I have n numpy arrays which all contain time series data for t periods. It is not an option to instead have one nxt matrix. I am storing all these arrays in a ResultSimulation object.

I seem to have repetitive code, which I am wondering how to shorten.

It starts with

ResultSimulation.v0 = ResultSteadyState.v0[::-1].copy()
ResultSimulation.v1 = ResultSteadyState.v1[::-1].copy()
ResultSimulation.nl = ResultSteadyState.nl[::-1].copy()
ResultSimulation.nh = ResultSteadyState.nh[::-1].copy()
ResultSimulation.ul = ResultSteadyState.ul[::-1].copy()
ResultSimulation.uh = ResultSteadyState.uh[::-1].copy()
ResultSimulation.V1 = ResultSteadyState.V1[::-1].copy()

at some place there is

# nTSteady is some number
ResultSimulation.v0 = ResultSimulation.v0[:nTSteady]
ResultSimulation.v1 = ResultSimulation.v1[:nTSteady]
ResultSimulation.nl = ResultSimulation.nl[:nTSteady]
ResultSimulation.nh = ResultSimulation.nh[:nTSteady]
ResultSimulation.ul = ResultSimulation.ul[:nTSteady]
ResultSimulation.uh = ResultSimulation.uh[:nTSteady]
ResultSimulation.V1 = ResultSimulation.V1[:nTSteady]

and finally,

addZeros = np.zeros((additionalSize,))
ResultSimulation.v0 = np.concatenate((ResultSimulation.v0, addZeros))
ResultSimulation.v1 = np.concatenate((ResultSimulation.v1, addZeros))
ResultSimulation.nl = np.concatenate((ResultSimulation.nl, addZeros))
ResultSimulation.nh = np.concatenate((ResultSimulation.nh, addZeros))
ResultSimulation.ul = np.concatenate((ResultSimulation.ul, addZeros))
ResultSimulation.uh = np.concatenate((ResultSimulation.uh, addZeros))

I guess one way to reduce this repetitive code, is to use "variable variable names", a practice that isn't encouraged in Python. Another alternative is to store them not directly in the object, but in an intermediate dict:

for series in ResultSimulation.myDict:
    ResultSimulation.myDict[series] = ResultSteadyState.myDict[series].copy()

for the first case. Say I don't like these two options+. What else can I do?

+: I dont mind creating an intermediate dictionary, but I want to keep my numpy arrays as properties of the object, and not stored in a dictionary within the object.