Python vs Julia : NPV 계산

Unsplash에 Chris Ried의 사진

아시다시피, 많은 사람들이 Python과 Julia 사이에서 어떤 언어가 더 나은지에 대해 이야기하고 있습니다. 어떤 사람들은 Python이 더 낫다고 말하고 다른 사람들은 Julia가 더 낫다고 말합니다. 그러나 각각의 장단점은 한 상황에서 하나를 더 좋게 만들고 다른 상황에서 다른 하나를 더 좋게 만듭니다. “Python vs Julia”에 대한 많은 기사가 있습니다. 그래서 저는 여기서 그것에 대해 논의하지 않을 것입니다.

저는 파이썬 배경에서 왔습니다. 내가 Julia를 배우기 시작했을 때 관찰 한 것은 Python을 아는 사람이 이러한 기본 Julia 구문을 배우는 것이 얼마나 유사하고 쉽다는 것입니다. 그러나 각 데이터 유형, 조건문, 루프 및 함수를 검토하고 이러한 구문의 유사점과 차이점을 논의하는 대신 Python에서 간단한 문제를 해결하고 Julia에서 동일한 알고리즘을 수행 할 것입니다.

이 글에서 제가 선택한 문제는 순 현재 가치 (NPV)를 계산하는 것입니다. NPV가 무엇인지 모르는 분들을 위해 간단한 말로 설명하겠습니다.

어떤 종류의 투자를 할 때 그 투자가 당신에게 이익을 줄 것인지 알아야합니다. 이 반환은 몇 개월 또는 몇 년이 걸릴 수 있습니다.

사업에 10 만 달러를 투자해야하는 상황을 상상해보십시오. 첫해에는 $ 20,000의 손실을, 두 번째 해에는 $ 50,000의 이익을, 세 번째 해에는 $ 80,000의 이익을 얻습니다. 숫자 만 더하면 투자로 $ 10,000의 이익을 얻을 수있는 것처럼 보입니다. 그러나 우리는 시간이 돈에 미치는 영향을 무시함으로써 그 숫자를 얻습니다. 현실 세계에서 오늘날 $ 100,000의 가치는 3 년 만에 같은 금액보다 높습니다. 예를 들어, $ 50에서 살 수있는 토피의 수는 3 년 동안 $ 50에 살 수있는 토피의 수보다 많을 것입니다. 따라서 3 년 만에 1 만 달러의 수익을 얻는 것처럼 보이지만 실제 사례가 아닐 수 있습니다.

이 문제에서 사용될 또 다른 용어가있을 것입니다. 그것은“할인율”입니다. 지금은 연간 가치 손실률로 생각하십시오. 이 문제의 경우 할인율은 5 %입니다.

NPV를 계산하는 공식은 다음과 같습니다.

현금 흐름 = 수입 또는 비용
r = 할인율
n = 기간 (지금부터 년 수)

수동 계산은 다음과 같습니다.

보시다시피, 실제 수익은 $ 15,000의 이익이 아니라 $ 4589.15의 손실입니다.

이제 Python에서 이에 대한 솔루션을 살펴 보겠습니다. 나는 이것을 위해 파이썬의 기본 구문을 사용할 것입니다.

입력으로 첫 번째 줄에는 공백으로 구분 된 현금 흐름이 포함됩니다. 이러한 현금 흐름은 소득과 비용을 나타 내기 위해 양수 또는 음수 일 수 있습니다. 두 번째 줄에 할인율이 표시됩니다.

def NPV(CF,r):
    npv=0.0
    for i in range(len(CF)):
        npv+= float(CF[i])/(1+r)**i
    return npv
CF=list(map(float,input().split()))
r=float(input())
print(NPV(CF,r))

function NPV(CF,r)
    npv=0.0
    for i= 1:length(CF)
        npv+= CF[i]/(1+r)^(i-1)
    end
return npv
end
CF=parse.(Float64,split(readline(), " "))
r=parse(Float64,readline())
println(NPV(CF,r))
  1. 입력 얻기
    Python과 Julia 모두에서 입력은 문자열로 삽입됩니다. Python은 "input"함수를 사용하고 Julia는 "readline"함수를 사용합니다. 공백으로 구분 된 입력을 삽입하면 공백이 두 언어의 문자로 간주됩니다.
  2. 문자열 분할
    앞서 언급했듯이 공백으로 구분 된 입력은 하나의 문자열로 간주됩니다. 분할하기 위해 split 기능을 사용할 수 있습니다.
    파이썬에서는 string.split ()로 사용됩니다. split 함수 내부에 아무것도 제공하지 않으면 공백을 문자열 구분 기호로 간주합니다.
    Julia에서는 split (string, <string separator>)로 사용됩니다.
  3. 문자열에서 부동 소수점으로 변환
    Python에서 분할 문자열은 부동 소수점으로 변환 된 다음 목록에 매핑됩니다.
    그러나 Julia에서는 "." 함수와 입력 매개 변수 사이에서 구문 분석 함수는 Array의 각 요소에 적용됩니다.
  4. 함수 정의
    Python의 "def"키워드는 Julia에서 "function"키워드로 대체되었습니다. 또한 콜론은 Julia에도 없습니다. 함수의 끝을 표시하기 위해 "end"키워드가 사용됩니다.
  5. for 루프
    의 차이점 Julia for 루프에서 눈에 띄는 첫 번째 차이점은 반복 가능한 루프를 작성하는 방식입니다. "in"키워드 대신 등호가 있고 그 뒤에는 시작점과 끝 점이 콜론으로 표시됩니다.
    줄리아에서 배열 인덱스는 0이 아닌 1로 시작합니다. 또한 루프는 끝 인덱스도 고려합니다.
    함수를 정의 할 때와 마찬가지로 "end"키워드를 사용하여 루프가 종료되었음을 프로그램에 알려야합니다.
  6. 인쇄 기능
    "print"키워드는 Python과 Julia 모두에서 사용할 수 있습니다. 그러나 Julia에는 "println"이라는 또 다른 키워드가 있습니다. 둘 사이에는 차이가 있습니다. "print"와 "println"의 차이점은 "println"은 커서를 다음 줄로 이동하고 "print"는 커서를 이동하지 않는다는 것입니다.

Suggested posts

좋은 습관을 만들고 유지하는 방법

장기적인 습관을 유지하기위한 생산성 팁

좋은 습관을 만들고 유지하는 방법

두 아이의 엄마가 된 후 일을 끝내기가 더 어려워졌습니다. 나는 한 작업에서 다음 작업으로 뛰어 들었고 하루가 끝날 때까지 아무것도하지 않았을 때 실망했습니다.

양자 컴퓨팅 Pt를위한 프로그래밍. 1 : NumPy

이제 양자 컴퓨팅이면의 물리학을 배우기 시작 했으므로 "이봐, 실제로 양자 컴퓨터를 사용하려면 실제로 양자 장치를 손으로 만들어야합니까?"라고 궁금해 할 것입니다. 답은 양자 컴퓨터를 컴퓨터라고 부르는 이유가 있습니다. 프로그래밍이 가능합니다! 이 시리즈에서는 수학 개념을 시뮬레이션하고 양자 컴퓨터에서 실행하는 소프트웨어를 구축하는 방법을 배우게됩니다. 깨끗하고 현대적이며 라이브러리가 풍부한 언어이기 때문에 Python을 사용하여 코드를 작성할 것입니다.

Related posts

"실용적인 프로그래머"의 5 가지 필수 사항

역대 베스트셀러 코딩 북의 요점

"실용적인 프로그래머"의 5 가지 필수 사항

Pragmatic Programmer는 1999 년에 처음 출판되었으며 이후 역대 최고의 프로그래밍 책으로 선정되었습니다. 저자 Andy Hunt와 David Thomas는 Agile Manifesto의 원저자 중 하나였으며 몇 가지 심각한 자격을 가지고 있습니다.

대규모 GraphQL 쿼리 공격으로부터 보호

공격자가 공개적으로 사용 가능한 GraphQL 인터페이스를 사용하여 사이트를 스크랩하거나 서비스 거부 공격을 실행하는 방법에 대해 알아보십시오. 이들은 4 가지 방법 중 하나로이를 수행 할 수 있습니다. 단일 대형 쿼리를 신중하게 구성하여 실행하고, 관련 데이터를 가져올 수있는 병렬 쿼리를 많이 작성하고, 일괄 요청을 사용하여 많은 쿼리를 연속적으로 실행하고, 마지막으로 많은 요청을 보냅니다.

기술 인터뷰의 사회적 구성 요소

코딩 문제는 스트레스가 많지만 스트레스에 대한 당신의 반응은 당신의 기술적 능력보다 더 크게 말합니다.

기술 인터뷰의 사회적 구성 요소

기술 업계의 직책을 위해 인터뷰 할 때 일반적으로 제안을 고려하기 전에 최소한 3 차례의 인터뷰를 거치게됩니다. 라운드는 일반적으로 다음과 같습니다. 그렇게 생각하면 잘못된 것입니다.

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자를 만드는 비 기술적 인 것들 나는이 기사를 작성하는 것을 한동안 미루고 있습니다. 나는 그것을 작성할 자격이 있다고 생각하지 못했습니다. 오늘은 쓸 때라고 생각했습니다.