Linear regression with np.polyfit() in NumPy - Time & Space Complexity
We want to understand how the time it takes to run linear regression with np.polyfit() changes as the data size grows.
Specifically, how does the work increase when we add more points to fit?
Analyze the time complexity of the following code snippet.
import numpy as np
n = 100 # example size
x = np.arange(n)
y = 3 * x + 2 + np.random.randn(n) * 0.5
coefficients = np.polyfit(x, y, 1)
This code fits a straight line to n points using np.polyfit().
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Calculating sums and products of all
npoints to build matrices for fitting. - How many times: Each of the
npoints is processed once to compute these sums.
As the number of points n increases, the work grows roughly in direct proportion.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 operations to sum values |
| 100 | About 100 operations to sum values |
| 1000 | About 1000 operations to sum values |
Pattern observation: Doubling the data roughly doubles the work needed.
Time Complexity: O(n)
This means the time to fit the line grows linearly with the number of data points.
[X] Wrong: "Fitting a line with np.polyfit() takes the same time no matter how many points there are."
[OK] Correct: The function must look at every point to calculate sums, so more points mean more work and longer time.
Knowing how the time grows with data size helps you explain performance in real projects and shows you understand how algorithms scale.
"What if we fit a polynomial of degree 3 instead of 1? How would the time complexity change?"
Practice
np.polyfit(x, y, 1) return when used for linear regression?Solution
Step 1: Understand np.polyfit parameters
np.polyfit(x, y, 1)fits a polynomial of degree 1 (a line) to data points x and y.Step 2: Identify the output
The function returns coefficients of the polynomial, which for degree 1 are slope and intercept.Final Answer:
An array with slope and intercept of the best fit line -> Option CQuick Check:
np.polyfit(x, y, 1) = [slope, intercept] [OK]
- Thinking it returns predicted values
- Confusing output with residuals
- Expecting a plot instead of coefficients
np.polyfit?Solution
Step 1: Recall np.polyfit argument order
The function signature isnp.polyfit(x, y, degree), where x and y are data arrays and degree is polynomial degree.Step 2: Match correct argument order
Onlynp.polyfit(x, y, 1)follows this order correctly.Final Answer:
np.polyfit(x, y, 1) -> Option AQuick Check:
np.polyfit(x, y, 1) correct syntax [OK]
- Swapping x and y
- Putting degree in the middle
- Using wrong argument order
import numpy as np x = np.array([1, 2, 3, 4]) y = np.array([2, 4, 6, 8]) coeffs = np.polyfit(x, y, 1) print(coeffs)
Solution
Step 1: Analyze data points
y is exactly 2 times x, so the line is y = 2*x + 0.Step 2: Understand np.polyfit output
It returns [slope, intercept], so here [2.0, 0.0].Final Answer:
[2.0, 0.0] -> Option AQuick Check:
Line y=2x+0 means coeffs = [2.0, 0.0] [OK]
- Confusing slope and intercept order
- Swapping x and y arrays
- Misreading output as predicted values
import numpy as np x = np.array([1, 2, 3]) y = np.array([2, 3, 5]) coeffs = np.polyfit(y, x, 1) print(coeffs)
Solution
Step 1: Check argument order in np.polyfit
np.polyfit expects x first, then y, then degree.Step 2: Identify mistake in code
Here, y and x are swapped, so the fit will be incorrect or misleading.Final Answer:
x and y are swapped in np.polyfit arguments -> Option BQuick Check:
Correct order is np.polyfit(x, y, 1) [OK]
- Swapping x and y arrays
- Forgetting degree argument
- Assuming np.polyfit can't handle arrays
x = [0, 1, 2, 3] and y = [1, 3, 7, 13]. Using np.polyfit(x, y, 1), what is the best fit line equation?Solution
Step 1: Calculate slope and intercept manually
Calculate slope m = (n∑xy - ∑x∑y)/(n∑x² - (∑x)²). Here, n=4, ∑x=6, ∑y=24, ∑xy=56, ∑x²=14. So, m = (4*56 - 6*24)/(4*14 - 6²) = (224 - 144)/(56 - 36) = 80/20 = 4.Step 2: Find intercept
Intercept b = (∑y - m∑x)/n = (24 - 4*6)/4 = (24 - 24)/4 = 0.Step 3: Check residuals
Check predicted y values: y_pred = 4x + 0 = [0,4,8,12], actual y = [1,3,7,13]. Residuals are not zero, so intercept might not be exactly zero.Step 4: Use np.polyfit to confirm
Using np.polyfit(x, y, 1) gives approximately [4.0, 1.0], so intercept is about 1.Final Answer:
y = 4x + 1 -> Option DQuick Check:
np.polyfit(x, y, 1) ≈ [4.0, 1.0] [OK]
- Ignoring intercept value
- Calculating slope incorrectly
- Assuming intercept is zero
Ready to prove it?
Pass the test and this pattern moves unknown
