"Solo gli array di dimensione 1 possono essere convertiti in scalari Python"
Aug 21 2020
Ho questo codice:
R = float(input("Enter the arc's radius of curvature: "))
H = float(input("Enter the arc's height: "))
import matplotlib.pyplot as plt
import numpy as np
import math
#cc = center of curvature
cc = math.sqrt(R**2 - (H / 2)**2)
x = np.linspace(-5,5,100)
y = math.sqrt(R**2 - (x - cc)**2)
plt.plot(x, y, 'c')
plt.show()
e ottieni questo errore:
TypeError: solo gli array di dimensione 1 possono essere convertiti in scalari Python
Come posso risolvere questo problema?
Risposte
1 Valdi_Bo Aug 21 2020 at 12:27
È possibile calcolare y = math.sqrt(R**2 - (x - cc)**2)
fino a x in una singola variabile, ma nel codice si tenta di calcolare questa espressione per ogni elemento di x array (e ottenere un array di risultati).
A questo scopo procedere come segue:
Definisci la tua espressione come funzione:
def myFun(R, x, cc): return math.sqrt(R**2 - (x - cc)**2)
Definisci la versione vettoriale di questa funzione:
myFn = np.vectorize(myFun, excluded=['R', 'cc'])
Calcola y come:
y = myFn(R, x, cc)
Per R = 20.0
, H = 30.0
e x = np.linspace(-5,5,10)
(un array più breve) ho ottenuto:
array([ 8.22875656, 10.34341406, 11.99128261, 13.34639903, 14.49112624,
15.47223243, 16.31925481, 17.05218586, 17.6852162 , 18.22875656])