"only length-1 arrays can be converted to Python scalars"-error with float conversion-function
<p>When running this program, I receive the error "TypeError: only length-1 arrays can be converted to Python scalars", specifically referring to line 9, where the x1-variable is assigned. </p>

<p>I'm kind of clueless here what it means in this context. I worked with a very similar piece of code for a previous assignment, where it all worked fine. I took in a vector as an argument to the function and computed all the values simultaneously. </p>

<p>Note: After I removed the floating it seems to work fine, but I have no clue why. Can anyone explain?</p>

<pre><code>import matplotlib.pyplot as plt
import numpy as np
g = 9.78
p = 1000
h = 50
s = 7.9 * 10**-2

def water_wave_speed(l):
  x1 = float(g * l/(2 * np.pi))
  x2 = 1 + s * float((4 * np.pi**2)/(p * g * l**2))
  x3 = float((2 * np.pi * h)/l)
  c = np.sqrt(x1 * x2 * np.tanh(x3))
  return c

l_values = np.linspace(0.001, 0.1, 10)
c_values = water_wave_speed(l_values)
plt.plot(l_values, c_values)
plt.show()
</code></pre>

<p>Drop all of those <code>float</code> calls and your code should work (as <em>floats</em>). You're trying to coerce numpy arrays into single float values which isn't going to work.</p>

python arrays numpy vector