diff --git a/numpy_financial/_financial.py b/numpy_financial/_financial.py
index e268424..be3fb67 100644
--- a/numpy_financial/_financial.py
+++ b/numpy_financial/_financial.py
@@ -849,8 +849,15 @@ def npv(rate, values):
     3065.22267
 
     """
-    values = np.asarray(values)
-    return (values / (1+rate)**np.arange(0, len(values))).sum(axis=0)
+    values = np.atleast_2d(values)
+    timestep_array = np.arange(0, values.shape[1])
+    npv = (values / (1 + rate) ** timestep_array).sum(axis=1)
+    try:
+        # If size of array is one, return scalar
+        return npv.item()
+    except ValueError:
+        # Otherwise, return entire array
+        return npv
 
 
 def mirr(values, finance_rate, reinvest_rate):

diff --git a/numpy_financial/tests/test_financial.py b/numpy_financial/tests/test_financial.py
index 791f1a7..ff91282 100644
--- a/numpy_financial/tests/test_financial.py
+++ b/numpy_financial/tests/test_financial.py
@@ -148,6 +148,19 @@ class TestNpv:
             npf.npv(Decimal('0.05'), [-15000, 1500, 2500, 3500, 4500, 6000]),
             Decimal('122.894854950942692161628715'))
 
+    def test_npv_broadcast(self):
+        cashflows = [
+            [-15000, 1500, 2500, 3500, 4500, 6000],
+            [-15000, 1500, 2500, 3500, 4500, 6000],
+            [-15000, 1500, 2500, 3500, 4500, 6000],
+            [-15000, 1500, 2500, 3500, 4500, 6000],
+        ]
+        expected_npvs = [
+            122.8948549, 122.8948549, 122.8948549, 122.8948549
+        ]
+        actual_npvs = npf.npv(0.05, cashflows)
+        assert_allclose(actual_npvs, expected_npvs)
+
 
 class TestPmt:
     def test_pmt_simple(self):

Slow NPV calculations for monte carlo simulation purposes
When using a large number of monte carlo simulations (~1e6 or more) for uncertainty calculations on NPV, the present implementation of Numpy-financial NPV is very slow. We suggest a new implementation of the NPV function , which allows calculation of serveral projects simultaneously, and is approximately 200 times faster than the current version for 1e6 simulations for a cash-flow of length 10.

In cases where the number of entries in the cash-flow is significantly higher than the number of projects to be calculated, the old implementation will be faster. To solve this, we suggest an adaptive approach which chooses method based on the input dimensions of the 'values' array.

Example code:
```
import numpy_financial as npf
import numpy as np
import time

def faster_npv(rate: float, values: list):
    """ A faster way to calculate NPV for several projects based 
    on numpy arrays. """
    discounted_values = []
    for i in range(np.shape(values)[0]):
        discounted_values.append(values[i] / (1 + rate) ** i)
    return np.sum(discounted_values, axis=0)

rate=0.05
no_simulations = int(1e6)

capex = np.random.normal(loc=10e5, scale = 10e3, size=no_simulations)
lifetime = 10 #years

opex = []
for yr in range(lifetime):
    opex.append(np.random.normal(loc=10e4, scale= 10e2,size=no_simulations))

start_time=time.time()
all_npv=np.nan*np.ones_like(capex)
for i in range(no_simulations):
    values = [capex[i]]+[op[i] for op in opex]
    all_npv[i]=npf.npv(rate, values)
print(f"Standard NPF calculations took {time.time()-start_time} s.")

start_time=time.time()
values=[capex]+opex
faster_npv(rate,values )
print(f"Faster NPV calculations took {time.time()-start_time} s.")
```

numpy_financial/tests/test_financial.py::TestNpv::test_npv_broadcast
numpy_financial/tests/test_financial.py::TestFinancial::test_when numpy_financial/tests/test_financial.py::TestFinancial::test_decimal_with_when numpy_financial/tests/test_financial.py::TestPV::test_pv numpy_financial/tests/test_financial.py::TestPV::test_pv_decimal numpy_financial/tests/test_financial.py::TestRate::test_rate numpy_financial/tests/test_financial.py::TestRate::test_rate_with_infeasible_solution[0-Decimal] numpy_financial/tests/test_financial.py::TestRate::test_rate_with_infeasible_solution[0-float] numpy_financial/tests/test_financial.py::TestRate::test_rate_with_infeasible_solution[1-Decimal] numpy_financial/tests/test_financial.py::TestRate::test_rate_with_infeasible_solution[1-float] numpy_financial/tests/test_financial.py::TestRate::test_rate_with_infeasible_solution[end-Decimal] numpy_financial/tests/test_financial.py::TestRate::test_rate_with_infeasible_solution[end-float] numpy_financial/tests/test_financial.py::TestRate::test_rate_with_infeasible_solution[begin-Decimal] numpy_financial/tests/test_financial.py::TestRate::test_rate_with_infeasible_solution[begin-float] numpy_financial/tests/test_financial.py::TestRate::test_rate_decimal numpy_financial/tests/test_financial.py::TestRate::test_gh48 numpy_financial/tests/test_financial.py::TestNpv::test_npv numpy_financial/tests/test_financial.py::TestNpv::test_npv_decimal numpy_financial/tests/test_financial.py::TestPmt::test_pmt_simple numpy_financial/tests/test_financial.py::TestPmt::test_pmt_zero_rate numpy_financial/tests/test_financial.py::TestPmt::test_pmt_broadcast numpy_financial/tests/test_financial.py::TestPmt::test_pmt_decimal_simple numpy_financial/tests/test_financial.py::TestPmt::test_pmt_decimal_zero_rate numpy_financial/tests/test_financial.py::TestPmt::test_pmt_decimal_broadcast numpy_financial/tests/test_financial.py::TestMirr::test_mirr numpy_financial/tests/test_financial.py::TestMirr::test_mirr_decimal numpy_financial/tests/test_financial.py::TestNper::test_basic_values numpy_financial/tests/test_financial.py::TestNper::test_gh_18 numpy_financial/tests/test_financial.py::TestNper::test_infinite_payments numpy_financial/tests/test_financial.py::TestNper::test_no_interest numpy_financial/tests/test_financial.py::TestNper::test_broadcast numpy_financial/tests/test_financial.py::TestPpmt::test_float numpy_financial/tests/test_financial.py::TestPpmt::test_decimal numpy_financial/tests/test_financial.py::TestPpmt::test_when_is_begin[1] numpy_financial/tests/test_financial.py::TestPpmt::test_when_is_begin[begin] numpy_financial/tests/test_financial.py::TestPpmt::test_when_is_end[None] numpy_financial/tests/test_financial.py::TestPpmt::test_when_is_end[0] numpy_financial/tests/test_financial.py::TestPpmt::test_when_is_end[end] numpy_financial/tests/test_financial.py::TestPpmt::test_when_is_begin_decimal[when0] numpy_financial/tests/test_financial.py::TestPpmt::test_when_is_begin_decimal[begin] numpy_financial/tests/test_financial.py::TestPpmt::test_when_is_end_decimal[None] numpy_financial/tests/test_financial.py::TestPpmt::test_when_is_end_decimal[when1] numpy_financial/tests/test_financial.py::TestPpmt::test_when_is_end_decimal[end] numpy_financial/tests/test_financial.py::TestPpmt::test_invalid_per[args0] numpy_financial/tests/test_financial.py::TestPpmt::test_invalid_per[args1] numpy_financial/tests/test_financial.py::TestPpmt::test_broadcast[None-desired0] numpy_financial/tests/test_financial.py::TestPpmt::test_broadcast[when1-desired1] numpy_financial/tests/test_financial.py::TestPpmt::test_broadcast_decimal[None-desired0] numpy_financial/tests/test_financial.py::TestPpmt::test_broadcast_decimal[when1-desired1] numpy_financial/tests/test_financial.py::TestIpmt::test_float numpy_financial/tests/test_financial.py::TestIpmt::test_decimal numpy_financial/tests/test_financial.py::TestIpmt::test_when_is_begin[1] numpy_financial/tests/test_financial.py::TestIpmt::test_when_is_begin[begin] numpy_financial/tests/test_financial.py::TestIpmt::test_when_is_end[None] numpy_financial/tests/test_financial.py::TestIpmt::test_when_is_end[0] numpy_financial/tests/test_financial.py::TestIpmt::test_when_is_end[end] numpy_financial/tests/test_financial.py::TestIpmt::test_when_is_begin_decimal[when0] numpy_financial/tests/test_financial.py::TestIpmt::test_when_is_begin_decimal[begin] numpy_financial/tests/test_financial.py::TestIpmt::test_when_is_end_decimal[None] numpy_financial/tests/test_financial.py::TestIpmt::test_when_is_end_decimal[when1] numpy_financial/tests/test_financial.py::TestIpmt::test_when_is_end_decimal[end] numpy_financial/tests/test_financial.py::TestIpmt::test_gh_17[0-nan] numpy_financial/tests/test_financial.py::TestIpmt::test_gh_17[1-0] numpy_financial/tests/test_financial.py::TestIpmt::test_gh_17[2--594.107158] numpy_financial/tests/test_financial.py::TestIpmt::test_gh_17[3--592.971592] numpy_financial/tests/test_financial.py::TestIpmt::test_broadcasting numpy_financial/tests/test_financial.py::TestIpmt::test_decimal_broadcasting numpy_financial/tests/test_financial.py::TestIpmt::test_0d_inputs numpy_financial/tests/test_financial.py::TestFv::test_float numpy_financial/tests/test_financial.py::TestFv::test_decimal numpy_financial/tests/test_financial.py::TestFv::test_when_is_begin_float[1] numpy_financial/tests/test_financial.py::TestFv::test_when_is_begin_float[begin] numpy_financial/tests/test_financial.py::TestFv::test_when_is_begin_decimal[when0] numpy_financial/tests/test_financial.py::TestFv::test_when_is_begin_decimal[begin] numpy_financial/tests/test_financial.py::TestFv::test_when_is_end_float[None] numpy_financial/tests/test_financial.py::TestFv::test_when_is_end_float[0] numpy_financial/tests/test_financial.py::TestFv::test_when_is_end_float[end] numpy_financial/tests/test_financial.py::TestFv::test_when_is_end_decimal[None] numpy_financial/tests/test_financial.py::TestFv::test_when_is_end_decimal[when1] numpy_financial/tests/test_financial.py::TestFv::test_when_is_end_decimal[end] numpy_financial/tests/test_financial.py::TestFv::test_broadcast numpy_financial/tests/test_financial.py::TestFv::test_some_rates_zero numpy_financial/tests/test_financial.py::TestIrr::test_npv_irr_congruence numpy_financial/tests/test_financial.py::TestIrr::test_basic_values[v0-0.0524] numpy_financial/tests/test_financial.py::TestIrr::test_basic_values[v1--0.0955] numpy_financial/tests/test_financial.py::TestIrr::test_basic_values[v2-0.28095] numpy_financial/tests/test_financial.py::TestIrr::test_basic_values[v3--0.0833] numpy_financial/tests/test_financial.py::TestIrr::test_basic_values[v4-0.06206] numpy_financial/tests/test_financial.py::TestIrr::test_basic_values[v5-0.0886] numpy_financial/tests/test_financial.py::TestIrr::test_trailing_zeros numpy_financial/tests/test_financial.py::TestIrr::test_numpy_gh_6744[v0] numpy_financial/tests/test_financial.py::TestIrr::test_numpy_gh_6744[v1] numpy_financial/tests/test_financial.py::TestIrr::test_gh_15 numpy_financial/tests/test_financial.py::TestIrr::test_gh_39 numpy_financial/tests/test_financial.py::TestIrr::test_gh_44