“크기 1 배열 만 Python 스칼라로 변환 할 수 있습니다.”

Aug 21 2020

이 코드가 있습니다.

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()

이 오류가 발생합니다.

TypeError : 크기 1 배열 만 Python 스칼라로 변환 할 수 있습니다.

이 문제를 어떻게 해결할 수 있습니까?

답변

1 Valdi_Bo Aug 21 2020 at 12:27

단일 변수 에서 xy = math.sqrt(R**2 - (x - cc)**2) 만큼 긴 것을 계산할 수 있지만 코드 에서는 x 배열각 요소 에 대해이 표현식을 계산 하고 결과 배열을 얻으려고합니다.

이를 위해 다음과 같이 진행하십시오.

  1. 표현식을 함수로 정의하십시오.

     def myFun(R, x, cc):
         return math.sqrt(R**2 - (x - cc)**2)
    
  2. 이 함수의 벡터화 된 버전을 정의 합니다.

     myFn = np.vectorize(myFun, excluded=['R', 'cc'])
    
  3. y 를 다음과 같이 계산 합니다.

     y = myFn(R, x, cc)
    

의 경우 R = 20.0, H = 30.0x = np.linspace(-5,5,10)(짧은 배열) 내가 가진 :

array([ 8.22875656, 10.34341406, 11.99128261, 13.34639903, 14.49112624,
       15.47223243, 16.31925481, 17.05218586, 17.6852162 , 18.22875656])