Skip to content

Commit

Permalink
ENH: replace einsum with matmul for speed
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffgortmaker committed Jan 1, 2022
1 parent af1103d commit ddc696e
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
8 changes: 6 additions & 2 deletions pyblp/markets/problem_market.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,13 @@ def solve(
probabilities, conditionals, compute_conditionals_tensor=self.K3 > 0
)
for p in range(self.parameters.P):
probabilities_tangent_mapping[p] += np.einsum('jki,j->ki', probabilities_tensor, xi_jacobian[:, p])
probabilities_tangent_mapping[p] += np.squeeze(
np.moveaxis(probabilities_tensor, 0, 2) @ xi_jacobian[:, [p]], axis=2
)
if conditionals_tensor is not None:
conditionals_tangent_mapping[p] += np.einsum('jki,j->ki', conditionals_tensor, xi_jacobian[:, p])
conditionals_tangent_mapping[p] += np.squeeze(
np.moveaxis(conditionals_tensor, 0, 2) @ xi_jacobian[:, [p]], axis=2
)

# compute contributions to micro moments, their Jacobian, and their covariances
if moments.MM == 0:
Expand Down
8 changes: 6 additions & 2 deletions pyblp/markets/results_market.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,13 @@ def safely_compute_jacobian_realizations(self, tilde_costs: Array) -> Tuple[Arra
probabilities, conditionals
)
for p in range(self.parameters.P):
probabilities_tangent_mapping[p] += np.einsum('jki,j->ki', probabilities_tensor, xi_jacobian[:, p])
probabilities_tangent_mapping[p] += np.squeeze(
np.moveaxis(probabilities_tensor, 0, 2) @ xi_jacobian[:, [p]], axis=2
)
if conditionals_tensor is not None:
conditionals_tangent_mapping[p] += np.einsum('jki,j->ki', conditionals_tensor, xi_jacobian[:, p])
conditionals_tangent_mapping[p] += np.squeeze(
np.moveaxis(conditionals_tensor, 0, 2) @ xi_jacobian[:, [p]], axis=2
)

# compute the supply-side Jacobian
eta, capital_delta_inverse, eta_errors = self.compute_eta(
Expand Down

0 comments on commit ddc696e

Please sign in to comment.