반응형

Numpy broadcasting

 

벡터의 내적을 구할 때는 차원이 서로 같아야만 하는 조건이있었습니다.

 

하지만 이번 브로드캐스트는 다른 차원의 연산이 가능한 점에서 차이가 있습니다.

 

우선 3가지 방법을 소개해드리면 다음과 같습니다.

1번 for문 // 2번 tile 함수 이용 // 마지막으로 자동 브로드 캐스팅 방법이있습니다.

 

numpy.empty(배열, dtype='조건')

- 특정한 값으로 초기화하지 않는 배열을 생성

 

numpy.empty_like(배열, dtype='조건')

- 배열의 크기와 동일하며 특정한 값으로 초기화하지 않는 배열을 생성

 

import numpy as np

x = np.arange(1, 10).reshape(3,3)
y = np.array([1,0,1])
z = np.empty_like(x)

print(x, end='\n\n')
print(y, end='\n\n')
print(z, end='\n\n')

# x + y
for i in range(3):
  z[i] = x[i] + y
print(z, end='\n\n')  

# 방법 2 tile()
kbs = np.tile(y, (3,1))
print(kbs, end='\n\n')
z = x + kbs
print(z, end='\n\n')

# 방법 3 nuympy 의 broadcast
mbc = x + y
print(mbc + 100, end='\n\n')


# 출력 결과

[[1 2 3]
 [4 5 6]
 [7 8 9]]

[1 0 1]

[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[ 2  2  4]
 [ 5  5  7]
 [ 8  8 10]]

[[1 0 1]
 [1 0 1]
 [1 0 1]]

[[ 2  2  4]
 [ 5  5  7]
 [ 8  8 10]]

[[102 102 104]
 [105 105 107]
 [108 108 110]]

 

x 행렬을 다음과 같이 주고 empty_like 함수를 사용하여 z 행렬을 그대로 복사하였습니다.

 

이후, 1번 방법 for문을 사용한 경우 각 행의 자리에 맞춰 1차원 배열인 y 값들을 더해 준 것을 확인 할 수 있습니다.

 

방법 2번 tile을 이용하여 구조를 맞추는 방식으로 3행과 길이는 1로 2차원 배열을 생성한 후 z 배열에 더한 것입니다.

만약 길이를 2로 주었다면 [ 1 0 1 1 0 1 ] 이 3행까지 반복되어서 출력되었을 것입니다.

 

방법 3번 자동 브로드 캐스팅 사용

자동으로 자리를 맞추어 값을 계산하여 출력합니다.

 

# broadcast ex
v = np.array([1,2,3])
w = np.array([4,5])

print(np.reshape(v, (3,1))*w, end='\n\n')
print(np.reshape(w, (2,1))*v, end='\n\n')

x = np.array([[1,2,3],[4,5,6]])
print(x, end='\n\n')
print(x+y, end='\n\n')
#print(x+w, end='\n\n') # 브로드캐스팅 불가능
print(x.T , end='\n\n')
print(x.T + w, end='\n\n')
print((x.T + w).T, end='\n\n')


# 출력 결과

[[ 4  5]
 [ 8 10]
 [12 15]]

[[ 4  8 12]
 [ 5 10 15]]

[[1 2 3]
 [4 5 6]]

[[2 2 4]
 [5 5 7]]
 
 [[1 4]
 [2 5]
 [3 6]]

[[ 5  9]
 [ 6 10]
 [ 7 11]]

[[ 5  6  7]
 [ 9 10 11]]

 

1행 3열 배열을 3행 1열로 바꾸어 내적하여 계산하였습니다. 

그 다음 라인에서는 w의 1행 2열 배열을 2행 1열로 내적하여 계산하였습니다.

 

행열의 구조를 변경하는 방법으로 .T 를 사용할 수도 있습니다.

x 행렬은 2행 3열짜리 배열로 구조를 잡아주었습니다.

 

x.T 를 사용하여 3행 2열짜리의 배열로 구조가 변경 된 것을 확인 하실 수 있습니다.

 

반응형
반응형

for 문의 기본 구조

for 변수 in 리스트(또는 튜플, 문자열):
    문장1
    문장2
    ...

 

Ex 1)

 

for i in [1, 2, 3, 4, 5] :
    print(i, end=' ')

print()

i는 1부터 5까지 저장되어있고,

1부터 5까지 차례대로 출력 하도록 되어있습니다.

 

출력 결과

 

 

Ex 2)

 

for문을 이용하여 soft 안에 저장된 데이터들을 키값만 가져와서 출력하고 values 값만 가져와서 출력한다.

 

soft = {'java':'프로그래밍언어', 'python':'접착언어', 'c':'시스템개발용'}
for i in soft.items():
    # print(i) key value 형태로 나타남
    print(i[0], ' ' , i[1])
    
for k, v in soft.items():
    print(k, ' ' , v)
    
for k in soft.keys():
    print(k)
    
for k in soft.values():
    print(k)
    
print()

 

출력 결과

 

 

Ex 3)

 

format 방법을 이용하여 구구단을 출력하였습니다.

 

여기서 format이란 { } 괄호를 이용하여 포맷팅하는 방법입니다.

 

% 와 기능은 동일하고, 괄호와 숫자만을 이용하여 구성합니다.

 

for n in [2] :
    print(' 구구단 : {}단'.format(n))
    for i in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
        print('{0}*{1}={2}'.format(n, i, n * i))
        
print()

 

출력 결과

 

 

Ex 4) enumerate 내장함수를 이용하여 인덱스 값도 얻는 예시

 

li = ['a', 'b', 'c']
for ind, d in enumerate(li): 
    print(ind, ' ', d)
    
print()

 

출력 결과

 

 

Ex 5) dict 를 이용한 상품 구매 가격 출력

price = {'사과':500, '수박':12000, '참외':600}
my = {'사과':2, '수박':1}
bill = sum(price[f] * my[f] for f in my)
print('총 구매 가격 : {}원'.format(bill) )

 

출력 결과

 

 

Ex 6) list를 이용한 예시

 

# 변수 datas의 타입이 int형인것이 있다면 li에 담아서 출력 list형태여서 []로 감싸줘야함

print()
datas = [1,2,'a',True,3]
li = [i * i for i in datas if type(i) == int] 
print(li)

 

출력 결과

 

 

Ex 7) Set을 이용한 예시

 

datas = {1,1,2,2,3}
se = {i + i for i in datas}
print(se)

 

출력 결과

 

 

Ex 8) list 안에 tuple 값을 집어 넣은 예시, 

 

aa = [(1,2),(3,4),(5,6)] 
for a, b in aa:
    print(a + b)

 

출력 결과

 

 

Ex 9) list / tuple / set 각각의 출력 결과 확인

 

print(list(range(1,6)))
print(tuple(range(1,6)))
print(set(range(1,6)))

 

출력 결과

 

Ex 10) for문을 이용한 2~9단 구구단 출력

 

for i in range(2, 10):
    for j in range(1, 10):
        print('{}*{}={}'.format(i, j, i*j), end = ' ')
    print()

 

출력결과

 

반응형

'python' 카테고리의 다른 글

python - 모듈  (0) 2020.05.08
python - 함수  (0) 2020.05.07
python - 반복문 (while)  (0) 2020.05.07
python - 제어문 ( if )  (0) 2020.05.07
python - 정규 표현식  (0) 2020.05.07
반응형

while문이란?

조건식이 참(True) 인 동안 반복해 배루 소스코드를 수행하고, if 문과 동일하게 while문 다음에 조건이 오며, : 으로 조건이 종료됐음을 인지시킵니다. 조건식은 소스코드를 수행하기전 수행하여 , 그 이후 소스코드를 수행한 후 다시 따집니다.

 

형태는 다음과 같습니다.

while 조건식:
	소스코드
    

 

 

Ex 1)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
= 1
while a <= 5:
    print(a, end = ' ')
    a += 1
 
colors = ['r''g''b']
= 0
while a < len(colors):
    print(colors[a], end = ' ')
    a += 1
    
print()
while colors:
    print(colors.pop(0), end = ' ' )
    
print()

 

출력 결과

 

 

 

Ex 2)

 

1
2
3
4
5
6
7
8
9
10
11
= 0
while a < 10:
    a += 1
    if a == 5:
        continue
    if a == 7:
        break
    
    print(a)
else:
    print('while 수행')

 

출력 결과

 

 

 

 

 

 

Ex 3)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import random
num = random.randint(110)
print(num)
# while 1000: 무한루프 while: 0 안돌아감  숫자 0은 false 제외 나머지 true
 
while 1:
    print('1 ~ 10 사이의 컴이 가진 숫자를 입력하시오')
    guess = input()
    su = int(guess)
    if su == num:
        print('성공 ~~~ ' * 5)
        break
    elif su < num:
        print('더 큰 수 입력')
    elif su > num:
        print('더 작은 수 입력')
 

 

출력 결과

 

 

반응형

'python' 카테고리의 다른 글

python - 함수  (0) 2020.05.07
python - 반복문 (for)  (0) 2020.05.07
python - 제어문 ( if )  (0) 2020.05.07
python - 정규 표현식  (0) 2020.05.07
python - 집합형 자료 ( Tuple , Set , Dict )  (0) 2020.05.07
반응형

if 자바는 {} 로 구분해주지만 파이썬에서는  : 로 구분해주고 들여쓰기를 이용함 이때 들여쓰기는 동일하게 들여써야함

형식은 다음과 같습니다

# if 조건이 1개의 경우
if 조건식:
	소스코드
    
    
# 2개 이상의 조건 처리시 
if 조건식:
	소스코드1
elif 조건식2:
	소스코드2
else:
	소스코드3

 

Ex 1)

 

1
2
3
4
5
6
7
8
9
10
    var = 10
    if var >=3:
        print('크다')
        print('참')
        if var >= 5:
            print('5보다도 크다')
    else:
        print('거짓')
    
    print('if문 밖')

 

 

변수 var에 값 10을 주고, 10이 3보다 크면 '크다' 와 '참' 을 출력해줍니다.

그리고 10이 5보다도 크다면 '5보다도 크다' 가 출력 됩니다.

이후 3보다 크다를 만족하지 않으면 바로 '거짓' 을 출력해줍니다.

 

출력 결과

 

 

Ex 2)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
jumsu = 80
if jumsu >= 90:
    print('우수')
elif jumsu >=70:
    print('보통')
else:
    print('미달')
    
if 90 <= jumsu <= 100:
    res ='a'
elif 70 <= jumsu < 90:
    res = 'b'
else:
    res = 'c'
    
    
print(res)

 

jumsu 변수에 80이라는 데이터 값을 주고 90점보다 크면 '우수' , 70점보다 크면 '보통' 그것도 아니라면 '미달을 출력합니다.

 

line 9 에서는 90 ~ 100 사이라면 'a' 를 70 ~ 90 사이라면 'b' 를 아니라면 'c' 를 출력해줍니다.

 

출력 결과

 

 

Ex 3)

 

1
2
3
4
5
6
names = ['일일일''이이이''삼삼삼']
if '일일일' in names:
    print('일일일 존재')
else:
    print('존재하지 않습니다.')
    
 
 

 

# names 안에 홍길동이 존재한다면 참 아니면 거짓 

 

출력 결과

 

 

Ex 4)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
= 'abc'
= 9 if a == 'def' else 11
print(b)
 
= 11
= 'abc' if a == 9 else 'def'
print(b)
 
print()
= 6
re = a * 2 if a > 5 else a + 2
print(re)
 
= 3
print((a + 2, a * 2)[a > 5])

 

출력 결과

 

 

반응형

'python' 카테고리의 다른 글

python - 반복문 (for)  (0) 2020.05.07
python - 반복문 (while)  (0) 2020.05.07
python - 정규 표현식  (0) 2020.05.07
python - 집합형 자료 ( Tuple , Set , Dict )  (0) 2020.05.07
python - 집합형 자료 ( String , List)  (0) 2020.05.07
반응형

3의 배수와 5의 배수의 개수와 그들의 합을 구하는 문제

 

 

int x, y = 0;    
int hap = 0;
    
    for(x=1; x<=100; x++) {
        if(x % 3 == 0 && x % 5 == 0) {
            y+=1;
            hap += x;
        }
    }
    System.out.println("개수 : " + y + " 합 : " + hap);
 
// 결과값
 
// 개수 : 6 합 : 315
 
 

 

 

변수 x와 y그리고 hap 의 값을 0으로 초기화시켜줍니다.

x는 수1의배수와 수2의 배수를 알기 위한 변수로 사용되고,

y는 그들의 개수를 누적해주는 역할을 합니다.

if문에서 x의 조건을 만족하는 경우 hap에 누적해줍니다.

 

for문과 if문을 이용

x의 값을 3으로 나는 나머지가 0이고

x의 값을 5로 나눈 나머지가 0이라면

개수(변수) y 는 숫자 1을 증가 시켜주고, 그 숫자를 hap에 누적해준다.

 

해당 과정을 x가 100이 될때까지 반복 수행할 수 있도록 합니다.

 

반응형
반응형

프로그래밍을 하는 사람들이라면 누구나 한번쯤은 해보았을법한 문제입니다.

2 x 1 = 2

2 x 2 = 4

.

.

.

2 x 9 = 18

이런식으로 9단까지 반복하는 문제입니다.

밑의 소스를 확인해보겠습니다.

 

i는 1부터 9까지 반복하고 j는 2부터 9까지 반복합니다.

i가 1일때 j는 2부터 9까지 가로로 출력해주고 내부 for문을 빠져나와서 외부 for문을 1증가시킵니다.

i가 2일때 j는 2부터 9까지 위와 같은 과정을 반복하고

i가 9까지 반복할 수 있도록 합니다.

 

for(i = 1; i <=9; i++) {
            for(j = 2; j <= 9; j++) {
                System.out.print(j + " * " + i + " = " + i*+ "   ");
            } System.out.println();
        }
 
 
// 결과값
 
// 2 * 1 = 2   3 * 1 = 3   4 * 1 = 4   5 * 1 = 5   6 * 1 = 6   7 * 1 = 7   8 * 1 = 8   9 * 1 = 9   
// 2 * 2 = 4   3 * 2 = 6   4 * 2 = 8   5 * 2 = 10   6 * 2 = 12   7 * 2 = 14   8 * 2 = 16   9 * 2 = 18   
// 2 * 3 = 6   3 * 3 = 9   4 * 3 = 12   5 * 3 = 15   6 * 3 = 18   7 * 3 = 21   8 * 3 = 24   9 * 3 = 27   
// 2 * 4 = 8   3 * 4 = 12   4 * 4 = 16   5 * 4 = 20   6 * 4 = 24   7 * 4 = 28   8 * 4 = 32   9 * 4 = 36   
// 2 * 5 = 10   3 * 5 = 15   4 * 5 = 20   5 * 5 = 25   6 * 5 = 30   7 * 5 = 35   8 * 5 = 40   9 * 5 = 45   
// 2 * 6 = 12   3 * 6 = 18   4 * 6 = 24   5 * 6 = 30   6 * 6 = 36   7 * 6 = 42   8 * 6 = 48   9 * 6 = 54   
// 2 * 7 = 14   3 * 7 = 21   4 * 7 = 28   5 * 7 = 35   6 * 7 = 42   7 * 7 = 49   8 * 7 = 56   9 * 7 = 63   
// 2 * 8 = 16   3 * 8 = 24   4 * 8 = 32   5 * 8 = 40   6 * 8 = 48   7 * 8 = 56   8 * 8 = 64   9 * 8 = 72   
// 2 * 9 = 18   3 * 9 = 27   4 * 9 = 36   5 * 9 = 45   6 * 9 = 54   7 * 9 = 63   8 * 9 = 72   9 * 9 = 81   

 

반응형

+ Recent posts