diff --git a/control/tests/timeresp_test.py b/control/tests/timeresp_test.py index 989c9bd95..fb21180b3 100644 --- a/control/tests/timeresp_test.py +++ b/control/tests/timeresp_test.py @@ -1230,6 +1230,14 @@ def test_to_pandas(): np.testing.assert_equal(df['x[0]'], resp.states[0]) np.testing.assert_equal(df['x[1]'], resp.states[1]) + # System with no states + sys = ct.ss([], [], [], 5) + resp = ct.input_output_response(sys, timepts, np.sin(timepts), t_eval=T) + df = resp.to_pandas() + np.testing.assert_equal(df['time'], resp.time) + np.testing.assert_equal(df['u[0]'], resp.inputs) + np.testing.assert_equal(df['y[0]'], resp.inputs * 5) + @pytest.mark.skipif(pandas_check(), reason="pandas installed") def test_no_pandas(): diff --git a/control/timeresp.py b/control/timeresp.py index bc13ad0d1..3822f13f0 100644 --- a/control/timeresp.py +++ b/control/timeresp.py @@ -678,12 +678,15 @@ def to_pandas(self): # Create a dict for setting up the data frame data = {'time': self.time} - data.update( - {name: self.u[i] for i, name in enumerate(self.input_labels)}) - data.update( - {name: self.y[i] for i, name in enumerate(self.output_labels)}) - data.update( - {name: self.x[i] for i, name in enumerate(self.state_labels)}) + if self.ninputs > 0: + data.update( + {name: self.u[i] for i, name in enumerate(self.input_labels)}) + if self.noutputs > 0: + data.update( + {name: self.y[i] for i, name in enumerate(self.output_labels)}) + if self.nstates > 0: + data.update( + {name: self.x[i] for i, name in enumerate(self.state_labels)}) return pandas.DataFrame(data)
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: