반응형

프로그래밍 53

얕은 복사와 깊은 복사가 이루어지는 경우 비교

그러면 얕은 복사랑 깊은 복사가 일어나는 경우를 비교해서 설명해줘. 깊은 복사는 .copy() 쓰지 않는 경우에 한해서 ChatGPT의 말:ChatGPT얕은 복사와 깊은 복사가 각각 발생하는 경우를 비교하여 설명하겠습니다. 특히 깊은 복사는 .copy()를 사용하지 않는 경우에 한해서 설명하겠습니다.1. 얕은 복사가 발생하는 경우a. 슬라이싱 (Slicing)슬라이싱을 통해 배열의 일부를 참조할 때 얕은 복사가 발생합니다. 슬라이싱한 배열은 원본 배열의 메모리 주소를 공유하므로, 슬라이싱된 배열에서 값이 변경되면 원본 배열에도 영향을 미칩니다.python코드 복사import numpy as np a = np.array([1, 2, 3, 4, 5]) b = a[1:4] # 슬라이싱 (얕은 복사) b[0] ..

[Numpy] reshape() 매개변수, 튜플 차이

array.reshape((2,2,2))랑 array.reshape(-1,1)에서 3개 입력할 때는 ()를 한 번 더 쓰고, 2개 입력할 때는 그렇게 하지 않는 이유가 뭐야? ChatGPT의 말:ChatGPTreshape에서 괄호를 한 번 더 쓰는 이유는 파라미터의 개수와 형태에 따라 다르게 해석되기 때문입니다.array.reshape((2, 2, 2)):이 형태는 튜플을 파라미터로 넘기는 방식입니다. reshape 함수는 다차원 배열을 만들기 위해서 튜플로 크기를 지정할 수 있습니다. ((2, 2, 2))는 하나의 인수로 인식되며, 이 인수는 2x2x2의 형태로 변환하라는 의미입니다. 여기서 괄호 두 개를 사용하는 이유는, 튜플 (2, 2, 2)를 하나의 인수로 전달하기 위함입니다.python코드 복사..

파이썬(리스트 등)의 copy()와 Numpy의 copy()

결론 list1.copy()는 얕은 복사이고,numpy에서 ndarray.copy()는 깊은 복사이다.   질문numpy에서의 .copy()는 deepcopy인 거고, numpy가 아닌 일반적인 상황에서 list를 .copy()하면 얕은복사인 거야? ChatGPT의 말:ChatGPT네, 맞습니다! 일반적인 리스트에서의 .copy()와 NumPy 배열에서의 .copy()는 서로 다른 동작을 합니다. 아래에서 각각의 경우를 자세히 설명하겠습니다.1. 일반적인 리스트의 .copy()얕은 복사 (Shallow Copy):Python의 기본 리스트에서 .copy() 메서드를 사용하면, 원본 리스트의 얕은 복사가 수행됩니다.즉, 새로운 리스트가 생성되지만, 그 리스트는 원본 리스트의 요소에 대한 참조를 유지합니다...

[Pandas] 숫자 슬라이싱과 문자(라벨) 슬라이싱의 차이

s[:5]와 s[:'다']에서 범위의 동작이 다르게 보이는 이유는, 숫자 슬라이싱과 라벨(문자) 슬라이싱이 pandas에서 다르게 처리되기 때문입니다.숫자 인덱스 슬라이싱 (s[:5]):pandas.Series에서 숫자로 슬라이싱을 할 때는 파이썬 기본 슬라이싱 규칙을 따릅니다. 즉, 끝 인덱스는 포함되지 않음.예를 들어, s[:5]는 0부터 4까지의 항목을 반환합니다.이 방식은 파이썬의 리스트나 배열에서 흔히 사용하는 슬라이싱 방식과 동일합니다. s = pd.Series(list('가나다라마'))s[:5]# 결과:# 0 가# 1 나# 2 다# 3 라# 4 마# dtype: object라벨(문자) 인덱스 슬라이싱 (s[:'다']):pandas.Series에서 라벨(문자)로 슬라..

[Pandas] isna()와 isnull()의 차이

isna()와 isnull()은 pandas에서 결측값을 확인할 때 사용하는 함수로, 동일한 기능을 수행합니다. 사실상 차이가 없으며, 두 함수는 서로 대체 가능합니다.기능:두 함수 모두 NaN(Not a Number)이나 None과 같은 결측값을 True로, 결측값이 아닌 경우 False로 표시합니다.이 함수들은 데이터프레임, 시리즈, 혹은 다른 pandas 객체에서 결측값을 찾을 때 사용됩니다.차이점:isna(): pandas에서 더 직관적인 이름으로 제공하는 함수이며, "NA"라는 표현을 강조하기 위해 사용됩니다. 이는 "결측값(N/A)"을 나타내는 용어를 사용하고 있습니다.isnull(): 더 오래된 함수로, pandas의 초기 버전부터 사용되어 왔으며, 여전히 지원되고 있습니다. "null"이라..

[Pandas] and와 & 차이

print(sample2[(sample2 >= 130) & (sample2 & 연산자를 사용하는 이유는, pandas의 시리즈 또는 데이터프레임의 요소 간 비교를 수행하기 때문입니다. 이와 관련된 주요 사항을 설명하겠습니다.& 연산자:&는 비트 연산자로, pandas에서 원소별(요소별) 논리 연산을 수행할 때 사용됩니다. 즉, sample2 >= 130과 sample2 예를 들어, sample2의 각 값에 대해 130 이상이고 170 이하인지 판단하여 필터링할 수 있습니다.and 연산자:and는 파이썬의 논리 연산자로, 단일 객체 간의 논리 연산에 사용됩니다. 그러나 pandas에서는 and를 사용하면 배열(시리즈 또는 데이터프레임) 간의 연산을 수행하지 못하고, 배열 자체를 비교하려 시도하므로 오류가 ..

[Pandas] 대괄호([])를 2번 사용하는 이유(단일 열/2개 이상의 열)

print(sample[['나', '라']])에서 대괄호를 두 번 사용하는 이유는 다음과 같습니다.sample['나']:sample['나']는 단일 열을 선택하는 방식입니다. 이렇게 하면 pandas.Series 객체가 반환됩니다. 즉, 하나의 열만 가져오는 경우입니다.sample[['나', '라']]:sample[['나', '라']]는 여러 열을 선택하는 방식입니다. 대괄호 안에 리스트 ['나', '라']를 넣어, 두 개 이상의 열을 선택하는 것입니다.이렇게 하면 pandas.DataFrame 객체가 반환됩니다. 즉, 여러 열을 가져오므로 DataFrame 형태를 유지합니다.따라서, 대괄호가 한 번 사용되면 단일 열이 선택되어 Series가 반환되고, 두 번 사용되면 열 목록이 선택되어 DataFram..

[Pandas] Series(list('문자열'))과 Series(['문자열'])의 차이

두 코드에서 생성된 pandas.Series의 결과가 다른 이유는 리스트의 구조 차이에 있습니다.첫 번째 코드: s = pd.Series(list('가나다라마'))여기서 list('가나다라마')는 문자열 '가나다라마'를 문자 하나씩 나누어 리스트로 변환합니다.결과적으로, 리스트는 ['가', '나', '다', '라', '마']가 되어 각 문자가 Series의 요소가 됩니다.따라서 출력 결과는 다음과 같습니다:python코드 복사0 가 1 나 2 다 3 라 4 마 dtype: object두 번째 코드: s = pd.Series(['가나다라마'])여기서는 문자열 '가나다라마' 자체가 리스트의 하나의 요소로 들어갑니다.리스트가 ['가나다라마']이므로, Series에는 하나의 요소가 포함되며, 그 요소는 문자열 ..

[파이썬] 2차원 누적합 알고리즘(백준 11660 합 구하기 5)

백준 11660 구간 합 구하기 5 시간초과 발생 코드import sysn, m = map(int, sys.stdin.readline().split())nums_list = []for _ in range(n): nums_list.append(list(map(int, sys.stdin.readline().split())))for i in range(m): hap = list(map(int, sys.stdin.readline().split())) total = 0 for p in range(hap[0] - 1, hap[2]): for q in range(hap[1] - 1, hap[3]): total += nums_list[p][q] ..

C/C++의 함수 vs 파이썬의 함수 차이점

C/C++(call by value VS call by reference)Call by value값을 전달하는 방법. 함수 내 매개변수의 값을 변경하지만, main 함수에서 전달했던 원본 값을 변경하지는 않는다.void modify(int x) { x += 1; printf("%d\n", x); //11}int main() { int a = 10; modify(a); printf("%d\n", a); //10} Call by reference주소를 전달하는 방법. main 함수에서의 원본 변수 주소를 전달함으로써 함수 내에서 원본 변수에 접근이 가능해진다.void modify(int* x) { *x += 1; printf("%d\n", *x); //11}int mai..

프로그래밍 2024.07.05
반응형