# Numpy says "probabilities do not sum to 1"

**URL:** https://discuss.pennylane.ai/t/numpy-says-probabilities-do-not-sum-to-1/487
**Category:** PennyLane Help
**Created:** [July 21, 2020, 2:16am UTC](https://discuss.pennylane.ai/t/numpy-says-probabilities-do-not-sum-to-1/487 "2020-07-21T02:16:45Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![snuffkin](https://yyz2.discourse-cdn.com/flex012/user_avatar/discuss.pennylane.ai/snuffkin/32/242_2.png) [@snuffkin](https://discuss.pennylane.ai/u/snuffkin)
#### Post date: [July 21, 2020, 2:16am UTC](https://discuss.pennylane.ai/t/numpy-says-probabilities-do-not-sum-to-1/487/1 "2020-07-21T02:16:45Z")

</div>

Hi!

I resize the MNIST images to 16x16 and run a quantum circuit.  
If I use AmplitudeEmbedding and set `analytic=False`, I get a numpy error.  
I assume this is a probability accuracy issue.  
[mnist\_20200721\_numpy\_error.txt](https://discuss.pennylane.ai/uploads/short-url/rH1wv4kID5gWDzzlqhg3eOlr4h6.txt) (31.6 KB) → Please change the file extension to “ipynb”.

Is there a workaround?

error message:

```
ValueError: probabilities do not sum to 1

```

---

<div class="post-metadata">

### Author: ![Maria\_Schuld](https://yyz2.discourse-cdn.com/flex012/user_avatar/discuss.pennylane.ai/maria_schuld/32/166_2.png) [@Maria\_Schuld](https://discuss.pennylane.ai/u/Maria_Schuld)
#### Post date: [July 21, 2020, 8:46am UTC](https://discuss.pennylane.ai/t/numpy-says-probabilities-do-not-sum-to-1/487/2 "2020-07-21T08:46:15Z")

</div>

Hey snuffkin!

You uncovered a very interesting bug there!

What seems to happen is that the conversion from tf tensors to numpy arrays creates an `ndarray` of data type `float32`. I suspect that with this lower precision, the automatic normalisation of the `AmplitudeEmbedding` method creates a quantum state vector which does not pass the checks of numpy’s `np.random.choice` (which is used for sampling measurement results in `"default.qubit"`) for a probability distribution to be normalised.

As a fix, you’d need to convert your array to `float64`:

```python
n_qubits = 8
dev = qml.device("default.qubit", wires=n_qubits, shots=10, analytic=False)

# quantum circuit
@qml.qnode(dev)
def circuit(features=None):
    qml.templates.AmplitudeEmbedding(features, range(n_qubits), normalize=True)
    return qml.expval(qml.PauliZ(0))

circuit(features=x_train[0].flatten().astype('float64'))

```

Interestingly, at least for the latest PL version I tested this with, assigning the training data point to a new variable seems to do the conversion automatically.

```python
n_qubits = 8
dev = qml.device("default.qubit", wires=n_qubits, shots=10, analytic=False)
x = x_train[0].flatten()
print(x.dtype) # 'float64'

# quantum circuit
@qml.qnode(dev)
def circuit(features=None):
    qml.templates.AmplitudeEmbedding(features, range(n_qubits), normalize=True)
    return qml.expval(qml.PauliZ(0))

circuit(features=x)

```

Hope this helps!

---

<div class="post-metadata">

### Author: ![snuffkin](https://yyz2.discourse-cdn.com/flex012/user_avatar/discuss.pennylane.ai/snuffkin/32/242_2.png) [@snuffkin](https://discuss.pennylane.ai/u/snuffkin)
#### Post date: [July 21, 2020, 1:04pm UTC](https://discuss.pennylane.ai/t/numpy-says-probabilities-do-not-sum-to-1/487/3 "2020-07-21T13:04:11Z")

</div>

Hi @Maria_Schuld,

Thanks for your response!  
With your support, my program works.

PennyLane is easy to use and fun to use.
