전체 글
-
[ Numpy ] 파이썬 라이브러리 넘파이_팬시 색인코딩 공부/Numpy 2021. 7. 16. 15:48
이번에는 넘파이의 팬시 색인에 대해서 간단하게 살펴보고자 합니다. 팬시 색인은 정수 배열을 사용한 색인을 설명하기 위해서 넘파이에서 차용한 단어입니다. 다음과 같은 넘파이 배열이 있을 때를 생각해봅시다. 배열에서 특정 순서로 로우를 선택하고 싶다면 원하는 순서가 명시된 정수가 담긴 넘파이 리스트를 넘기면 되는 것입니다. 순서를 명시한 리스트로 팬시 색인을 하게 되면 4번째 로우, 3번째 로우, 0번째 로우, 6번째 로우 순서로 색인을 할 수 있습니다. 색인을 음수로 설정하면 끝에서부터 로우를 선택합니다. 다차원 색인 배열을 넘기는 것은 조금 다르게 동작합니다. 각각의 색인 튜플에 해당하는 1차원 배열이 선택됩니다. 팬시 색인은 선택된 데이터를 새로운 데이터로 복사합니다.
-
[ Numpy ] 파이썬 라이브러리 넘파이_ 슬라이스코딩 공부/Numpy 2021. 7. 15. 16:33
이번에는 넘파이 배열의 슬라이싱에 대해서 살펴봅시다. (1) 1차원 배열 1차원 배열의 경우 익숙한 문법으로 슬라이싱할 수 있습니다. (2) 2차원 배열 2차원 배열부터 조금은 혼동이 올 수 있습니다. arr2d[:2] 는 arr2d의 시작부터 두 번째 로우까지의 선택이라고 생각하면 이해하는데 도움이 될 수 있습니다. 여기서 슬라이싱된 조각 배열들의 차원에 주목할 필요가 있습니다. 보면 같은 [7,8,9] 를 반환하는데 하나는 shape가 (3,) 이고 하나는 (1,3)인 것을 볼 수 있습니다. arr2d[2,:] 이는 정수 색인과 슬라이스를 함께 사용해서 한 차원 낮은 결과를 얻을 수 있고 arr2d[2:,:] 이는 모두 슬라이스를 사용했기 때문에 원래 차원을 얻을 수 있습니다. 슬라이스도 마찬가지로 ..
-
[ Numpy ] 파이썬 라이브러리 넘파이 _ 배열 색인코딩 공부/Numpy 2021. 7. 15. 15:10
이번에는 넘파이 배열 색인과 슬라이싱에 대해서 다루겠습니다. 데이터의 부분집합 또는 개별 요소를 선택하는 방법이라고 생각하시면 되는데, 1차원 배열에서는 파이썬 리스트와 비슷하게 동작합니다. arr[5:8] = 12 처럼 슬라이싱된 배열 조각에 스칼라 값을 대입하면 조각 전체로 브로드캐스팅됩니다. 리스트와의 중요한 차이점은 배열 조각은 원본 배열의 뷰라는 점인데, 데이터는 복사되지 않고 뷰에 대한 변경은 그대로 원본 배열에 반영된다는 점입니다. 이는 넘파이가 대용량의 데이터 처리를 목적으로 만들어졌기 때문에 데이터 복사로 인한 성능과 메모리 문제 발생을 막기 위해서 설계되었다고 합니다. 만약 데이터를 복사하여 얻고 싶다면 다음과 같이 .copy()를 통해서 복사한 배열 조각을 얻을 수 있습니다 . 다차원..
-
[ Numpy ] 파이썬 라이브러리 넘파이_산술 연산코딩 공부/Numpy 2021. 7. 15. 14:13
이번에는 넘파이의 기본적인 산술 연산을 알아봅시다. 넘파이 배열의 가장 큰 특징은 반복문을 작성하지 않고 데이터를 한번에 처리할 수 있다는 것입니다. (벡터화) (1) 같은 크기의 배열 간의 산술 연산은 배열의 각 원소 단위로 적용 arr = np.array([[1,2,3],[4,5,6]]) arr * arr [[ 1*1, 2*2, 3*3] ,[4*4, 5*5, 6*6]] 의 연산 즉 같은 자리에 위치한 원소들끼리 연산이 되는 것이다. 다른 산술 연산 역시 마찬가지이다. (2) 스칼라 인자가 포함된 산술 연산의 경우 모든 원소에 스칼라 인자가 적용된다. 모든 인자에 3이 곱해져서 결과가 나오는 것을 보실 수 있습니다. 마찬가지로 스칼라 인자가 모든 원소에 적용된 것을 보실 수 있습니다. (3) 같은 크기..
-
[ 백준 4673번 ] 셀프 넘버코딩 공부/Baekjoon Problem_Set 2021. 7. 14. 17:31
이번에 풀어볼 문제는 4673번 셀프 넘버입니다. 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자릿수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))),... 과 같은 무한수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런 식으로 다음과 같은 수열을 만들 수 있다. 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, ..
-
[ 백준 15596번 ] 정수 N개의 합코딩 공부/Baekjoon Problem_Set 2021. 7. 14. 16:50
이번에 풀어볼 백준 문제는 리스트로 주어지는 정수 N개의 합을 구하는 함수를 작성하는 문제입니다. 문제 정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오. 작성해야 하는 함수는 다음과 같다. a: 합을 구해야 하는 정수 n개가 저장되어 있는 리스트 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000) 리턴 값: a에 포함되어 있는 정수 n개의 합 (정수) 기본적으로 주어지는 함수 구조는 다음과 같습니다. def solve(a): ans = 0 return ans 이제 기본적인 구조에서 코드를 작성해봅시다. 아이디어는 간단합니다. 함수 인자로 리스트를 받아오고 ans 변수에 리스트의 원소들을 하나씩 접근하여 더해준다. 리스트 원소에 접근은 어떻게 할 것인가? --> fo..
-
[ 백준 4344번 ] 평균은 넘겠지.코딩 공부/Baekjoon Problem_Set 2021. 7. 9. 19:12
이번에는 백준 4344번 문제를 풀어보도록 하겠습니다. 결론부터 이야기하자면 정답은 나오는데, 제출시 런타임 오류가 나서 완벽한 해결방법은 아닌 것 같습니다. 그래서 문제 해결의 아이디어만 남기기 위해서 글을 적습니다. 문제는 다음과 같습니다. 문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 입력 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. 출력 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출..
-
[ 백준 8958번 ] OX퀴즈 문제코딩 공부/Baekjoon Problem_Set 2021. 7. 9. 19:05
이번에는 백준 8958번 문제를 풀어보겠습니다. "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오. 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다. 테스트 케이스의 개수를 입력받아서 테스트 케이스만큼 반복문을 돌리자. 각 루프마다 입력 데이터 O..