<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Technical Support</title>
    <link>https://technical-support.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 30 Jul 2026 02:44:03 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Tech_holic</managingEditor>
    <item>
      <title>[알고리즘 스터디] python coin flips 문제 풀기</title>
      <link>https://technical-support.tistory.com/116</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;문제&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Create a program that uses Python&amp;rsquo;s random number generator to simulate ﬂipping a coin several times. The simulated coin should be fair, meaning that the probability of heads is equal to the probability of tails. Your program should ﬂip simulated coins until either 3 consecutive heads of 3 consecutive tails occur. Display an H each time the outcome is heads, and a T each time the outcome is tails, with all of the outcomes for one simulation on the same line. Then display the number of ﬂips that were needed to reach 3 consecutive occurrences of the same outcome. When your program is run it should perform the simulation 10 times and report the average number of ﬂips needed. Sample output is shown below:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;H T T T 4 flips&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;H H T T H T H T T H H T H T T H T T T 19 flips&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;T T T 3 flips&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;T H H H 4 flips&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;H H H 3 flips&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;T H T T H T H H T T H H T H T H H H 18 flips&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;H T T H H H 6 flips&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;T H T T T 5 flips&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;T T H T T H T H T H H H 12 flips&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;T H T T T 5 flips&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;On average, 7.9 flips were needed.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;코드&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1655361966674&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import random

print('##################### solution #####################')
coin= {0:'H', 1:'T'}
result_num = []
for i in range(10):
    cnt = 1
    q = list()
    while cnt &amp;lt;3:
        n = random.randrange(0, 2)
        if len(q) &amp;gt;0:
            if q[-1] == coin[n]:
                cnt +=1
            else:
                cnt=1
        q.append(coin[n])
    result_num.append(len(q))
    print(*q, f'{len(q)} flips')
print(f'On average, {sum(result_num)/len(result_num)} flips were needed.')&lt;/code&gt;&lt;/pre&gt;</description>
      <category>5) etc.</category>
      <category>python coin flips #파이썬 동전 던지기 #파이썬 알고리즘 문제</category>
      <author>Technical_Supporter</author>
      <guid isPermaLink="true">https://technical-support.tistory.com/116</guid>
      <comments>https://technical-support.tistory.com/116#entry116comment</comments>
      <pubDate>Thu, 16 Jun 2022 15:47:08 +0900</pubDate>
    </item>
    <item>
      <title>코드 수정시 주의 사항 ver.1</title>
      <link>https://technical-support.tistory.com/114</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음 내용은 내가 코드를 작성하면서 경험적으로 얻은 tip들입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 대부분 코드 작성하시는 분들은 잘 아실거라고 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 제 경험에 기반한 것이므로 다를 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 주석&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;= 가끔 예전 코드를 수정하거나 필요할때가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전에 작성해놓은 코드에 구현해놓은 일부분이 필요해서 찾아보면 헷갈리고는 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럴때면 예전에 내가 작성해놓은 주석이 매우 큰 도움이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마치 '사진'을 보면서 추억을 회상하듯이 주석을 통해 내 코드를 기억해낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀 프로젝트를 진행할 때 코드의 주석은 매우 큰힘이된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 파일 제목&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;= 코드를 작성하다보면 backup 파일을 만드는데 잘못하면 헷갈린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 찾을때 파일제목을 보고 찾는데 제목에 날짜만 쓰여 있으면 크게 헷갈린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다고 매번 열어서 주석을 보고 찾는것도 쉽지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 제목에 간략하게라도 무엇을 했는지 '힌트'라도 써놓으면 큰 도움이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 변수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;= 변수이름 정하는 거는 프로그래머의 가장 큰 어려움이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 공감을 못했는데, 논문 구현을 할때 일이 어렵거나 오래걸릴수록 변수가 겹칠확률이 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 귀찮아서 a1, a2, aa, 이런식으로 변수 설정하다가 스파게티 코드가 되어갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다고 변수의 의미를 너무 자세히 설명할려고 길게 작성하면 코드를 한눈에 보기 어려웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수이름은 항상 신중하게 작성해야 한다고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) log 작성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;= 정말 오랜된 코드는 이름이랑 주석, 변수를 봐서는 의미를 기억못할때가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 나는 개인적인 노트 어플에 오늘 어떤코드를 어느 파일위치에서 작성했는지 간략하게 쓴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 해당 코딩 작업을 하면서 참고한 홈페이지는 url로 항상 같이 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람은 똑같은 실수를 하기 때문에ㅎㅎ 같이 넣어놓으면 큰 도움이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 개인적인 경험이므로 참고만 부탁드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2편, 3편도 기회가 되면 작성해보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;만약 해당 글을 가지고 가시면 reference 부탁드립니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>1) Tech</category>
      <author>Tech_holic</author>
      <guid isPermaLink="true">https://technical-support.tistory.com/114</guid>
      <comments>https://technical-support.tistory.com/114#entry114comment</comments>
      <pubDate>Wed, 20 Apr 2022 11:06:36 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 실시간 Data 처리기-2 (window os 환경)</title>
      <link>https://technical-support.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난 포스팅(&lt;a href=&quot;https://technical-support.tistory.com/110&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;technical-support.tistory.com/110&lt;/a&gt;) 에서는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 저장 Process와 처리 Process를 나누어서 파일이 저장됐을 때를 확인하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장된 파일을 처리하는 방식으로 진행 했었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다 보니 파일 개수에 의존하게 되고, 만약 코드 실행 마지막 파일에 경우 처리 하지 못하는 코드였고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 실시간으로 들어오는 유효한 data를 list에 쌓아 놓고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 들어왔을때 쌓인 list를 처리하는 방식으로 수정했습니다!!.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 하기위해선 송신부에서 '유효 or 유효 X' 와 같은 제어 시점을 알려주는 값을 보내줘야 했습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9d9d9d;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;1.&lt;/span&gt; &lt;span style=&quot;color: #ffffff;&quot;&gt;수신부 packet size value 추가&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1647394769826&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def packet_recv_process(PORT, transmit_ready, connected, q_packet,readable,packet_size):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind(('', PORT))
    server_socket.listen(1)
    client_socket, addr = server_socket.accept()
    print('Connected by', addr)

    while True:
        try:
            if transmit_ready==False:
                transmit_ready = True
                check_msg = client_socket.recv(1024)
                print('Received from', addr, check_msg.decode())
                if readable.value == 0:
                    readable.value = 1
                data = 'OK'
                client_socket.sendall(data.encode())
            else:
                packet = recv_msg(client_socket)
                packet_size.value = len(packet)

                if packet == None:
                    break

                if packet_size.value &amp;gt; 1:  # 유효 하지 않을 때는 크기가 1인 packet을 보낸다.
                    q_packet.put(packet)   # 유효할 때 만 packet을 형성해서 보냄
                else:
                    packet.clear()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드에서 보시면 packet_size라는 multiprocess Value 값을 할당해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수신부에서 받는 packet 사이즈를 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;packet 크기가 1 보다 클 때만 data 저장 및 처리를 위한 q_packet에 넣어주게 되죠!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 size value를 공유하게 되면 size가 1보다 클때는 list에 넣어서 쌓아두고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;size가 1 일때 list에 쌓인 data를 처리해주면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳이 파일에 접근하지 않고 바로 처리가 가능해집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #9d9d9d;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;2.&lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt; Data list에 쌓고 처리하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1610407330957&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def file_save_process(q_packet,file_dir,base_dir, Fs, q_name,packet_size):

    p = psutil.Process(os.getpid())
    p.nice(psutil.HIGH_PRIORITY_CLASS)
    name_make_value = 0
    filedir_dict = dict()
    sig_list = list()
    f_range_env = np.array([1, 50, 1000])
    while True:
        current_date = datetime.datetime.now().strftime(&quot;%Y-%m-%d&quot;)
        name_make_value = make_dirname(file_dir,current_date,name_make_value,base_dir,q_name,filedir_dict)

        try:
            if q_packet.empty() is False:
                packet_message = q_packet.get()
                createFolder(file_dir.value)
                file_name = packet_message[0:15].decode()
                fn= file_dir.value + f'/sample_{file_name}.csv'
                size = int(chr(packet_message[15]))
                sample_rate = int(packet_message[16:20].decode())
                Fs.value = sample_rate
                time_stamp = packet_message[20:43].decode()
                signal_bytes = packet_message[43:]
                signal_bytes_to_array = np.frombuffer(signal_bytes, dtype=np.float64).reshape(size,-1)
                data_write(time_stamp,signal_bytes_to_array, fn) # raw data save
                sig_list.append(signal_bytes_to_array)

            if packet_size.value == 1:
                if len(sig_list)&amp;gt;0:
                    all_sig = np.array(sig_list).reshape(-1,500)
                    print(all_sig.shape)
                    sig_list[:] = []
                    sig = [all_sig[i::size].flatten() for i in range(size)]
                    sig = np.array(sig)
                    ### 생략 ####&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 packet_size value 가 1 이고 data를 쌓는 list의 크기가 0보다 크다면, 처리하도록 변경했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손봐야할 부분이 많지만 좋은 연습이 되었던 코드였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다!&lt;/p&gt;</description>
      <category>2) Tech</category>
      <category>python multiprocessing</category>
      <category>python multiprocessing Value</category>
      <category>python 실시간 data</category>
      <category>실시간 data 처리</category>
      <category>파이썬 data 처리</category>
      <author>Technical_Supporter</author>
      <guid isPermaLink="true">https://technical-support.tistory.com/111</guid>
      <comments>https://technical-support.tistory.com/111#entry111comment</comments>
      <pubDate>Wed, 16 Mar 2022 10:39:35 +0900</pubDate>
    </item>
    <item>
      <title>Linux에서 Anaconda conda activate이 실행 되지 않을 때</title>
      <link>https://technical-support.tistory.com/112</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Linux Anaconda 사용중 내가 만든 환경으로 Activation이 되지않을 때가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가상환경 list에서 확인시에는 환경이 존재하지만, Acivation이 안된다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같은 Error가 뜬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;CommandNotFoundError:&amp;nbsp;Your&amp;nbsp;shell&amp;nbsp;has&amp;nbsp;not&amp;nbsp;been&amp;nbsp;properly&amp;nbsp;configured&amp;nbsp;to&amp;nbsp;use&amp;nbsp;'conda&amp;nbsp;activate'. &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;To&amp;nbsp;initialize&amp;nbsp;your&amp;nbsp;shell,&amp;nbsp;run&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;581&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3IJPd/btrbLe71R1B/cpZSr5NQLXnZKsZl09gJak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3IJPd/btrbLe71R1B/cpZSr5NQLXnZKsZl09gJak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3IJPd/btrbLe71R1B/cpZSr5NQLXnZKsZl09gJak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3IJPd%2FbtrbLe71R1B%2FcpZSr5NQLXnZKsZl09gJak%2Fimg.png&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;581&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;b&gt;▶&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;해결방법&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아주 간단한 명령어로 해결가능함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;$ source ~/anaconda3/etc/profile.d/conda.sh&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(~ 부분에는 linux내 anaconda3 경로를 입력해주면 된다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;67&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YI6TN/btrbOP0Pbtf/o53vWRkCvJoSlZc8fKXZH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YI6TN/btrbOP0Pbtf/o53vWRkCvJoSlZc8fKXZH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YI6TN/btrbOP0Pbtf/o53vWRkCvJoSlZc8fKXZH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYI6TN%2FbtrbOP0Pbtf%2Fo53vWRkCvJoSlZc8fKXZH0%2Fimg.png&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;67&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽어주셔서 감사합니다.&lt;/p&gt;</description>
      <category>2) Tech</category>
      <category>CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.</category>
      <category>Linux Anaconda</category>
      <category>Linux Anaconda Error</category>
      <category>Linux Anaconda 가상환경</category>
      <category>Linux Conda Activate 안될때</category>
      <category>Linux conda activate 오류</category>
      <category>RUN</category>
      <category>To initialize your shell</category>
      <author>Technical_Supporter</author>
      <guid isPermaLink="true">https://technical-support.tistory.com/112</guid>
      <comments>https://technical-support.tistory.com/112#entry112comment</comments>
      <pubDate>Tue, 10 Aug 2021 18:51:15 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 실시간 Data 처리기(window os 환경)</title>
      <link>https://technical-support.tistory.com/110</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;요즘 신호data를 쌓고 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그런데 아무래도 window 환경이라 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;data 수집 후 직접 축적된 data를 다시 가져와서 처리하는 과정이 굉장히 번거로워서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미루고 미루던 실시간 처리기를 만들어 봤습니다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;급하게 만들어서 부족한 부분이 있겠지만, 여기 올리면 조언도 좀 받을 수 있을거 같아서 올리기로 했어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Test 해봤을 때는 잘동작되네요!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;python multiprocessing을 사용하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;raw data save process와 저장된 data를 불러와서 처리하는 process를 생성했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 data 처리를 하려면 두 프로세스가 data directory를 공유해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 막상 문자열을 공유해야하다보니 생각한대로 되지않아, 조금 지저분한 방법을 사용했네요..!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 file_dir value를 공유하려 했는데 한프로세스에서만 적용이되고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 프로세서에서 적용이 안돼서 뭐 다른 문제일 수 도 있겠지만,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dict에 문자열(경로) 할당하고 dict를 multiprocessing Queue에 넣었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;1. rawdata 저장 경로 매일 Update 해주기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1646366063345&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from ctypes import c_wchar_p

base_dir = &quot;D:/cDAQ/Python/&quot;
file_dir = multiprocessing.Value(c_wchar_p, base_dir) 
q_name = multiprocessing.Queue()

def make_dirname(file_dir,date,make_value,base_dir,q_name,filedir_dict):

    if make_value== 0:
         filedir_dict.clear()
         file_dir.value = base_dir + date
         filedir_dict['dir'] = file_dir.value
         q_name.put(filedir_dict) # 여기서 q 에 넣으므로 q 안에 경로 값을 공유할 수 있게되었네요!
         make_value= 1
    return make_value

    else:
         if file_dir.value[-10:] != date: #날짜 확인해서 날짜 바뀔 때 다시 경로 Update 
              name_make_value = 0
              make_dirname(file_dir,date,name_make_value,base_dir,q_name,filedir_dict)
         return name_make_value

def file_save_process(q_packet,file_dir,base_dir, Fs, q_name):
    p = psutil.Process(os.getpid())
    p.nice(psutil.HIGH_PRIORITY_CLASS)
    name_make_value = 0
    filedir_dict = dict()

    while True:
          current_date = datetime.datetime.now().strftime(&quot;%Y-%m-%d&quot;)
          make_value=make_dirname(file_dir,current_date,make_value,base_dir,q_name,filedir_dict)
          
          ########## 중략 #########&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 ! 여기까지 진행 했을 때 날이 바뀔때 마다 변경된 경로에 저장될 뿐아니라,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 프로세스에서도 경로이름 공유가 가능해졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;2. 공유 된 경로에 저장된 data 처리하기&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1646366096816&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def factor_check_process(q_name,Fs,readable):
     p = psutil.Process(os.getpid())
     p.nice(psutil.HIGH_PRIORITY_CLASS)
     global valid_factor
     cnt = 1
     f_range_env = np.array([1, 50, 1000])

     while True:
          try:
              if readable.value == 1:
                  if q_name.empty() is False:
                      dir = q_name.get()
                      if 'dir' in dir:
                         data_dir = dir['dir']
                         print(data_dir)
                  else:
                        data_list = glob.glob(os.path.join(data_dir, 'sample_*.csv'))
                        end_num = len(data_list)
                        if end_num==0:
                            cnt = 1
                        if (cnt == end_num):
                            continue
 
                        if end_num&amp;gt;=2 :
                            sig, constant_sig, elapsed = data_preprocess(data_list, cnt)
                            signal_process = Analysis(sig, constant_sig, elapsed,Fs)
                            ...... 생략&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;q_name에 값이 들어오게 되면 경로를 공유 받게 되고 그 이후로 파일 list에서 저장된 파일을 처리하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드는 아직 미흡하고 비효율 적인 부분이 많아서.. 시간날 때 다른 방식으로 바꾸어 보려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 다음에는 유효한 signal 주기가 시작될때 list에 넣어놓고 주기가 끝나면 바로 처리해보는 방식으로 바꿔보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번시간에는 code 공부 했다고 생각해야겠어요..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>2) Tech</category>
      <category>multiprocessing</category>
      <category>Python</category>
      <category>python multiprocessing 문자열 공유</category>
      <category>python Queue</category>
      <category>python 문자열 공유</category>
      <category>파이썬</category>
      <author>Technical_Supporter</author>
      <guid isPermaLink="true">https://technical-support.tistory.com/110</guid>
      <comments>https://technical-support.tistory.com/110#entry110comment</comments>
      <pubDate>Fri, 8 Jan 2021 16:46:04 +0900</pubDate>
    </item>
    <item>
      <title>블리자드 무한인증 해결방법, 휴먼계정 해제, blizzard</title>
      <link>https://technical-support.tistory.com/108</link>
      <description>&lt;p&gt;안녕하세요&lt;/p&gt;
&lt;p&gt;제가 최근에 겪은 &lt;b&gt;blizzard 핸드폰 무한인증&amp;nbsp; 문제&lt;/b&gt;에 대해 설명하고 해결방법에 대해 가볍게 작성하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오랜만에 친구랑 핸드폰으로 하스스톤 게임을 하게 되었습니다.&lt;/p&gt;
&lt;p&gt;그런데 계정이 &lt;b&gt;휴면상태&lt;/b&gt;이더라구요&lt;/p&gt;
&lt;p&gt;휴면 상태를 해제하기 위해 &lt;b&gt;비밀번호를 변경&lt;/b&gt;해볼려고 시도했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;310&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qWlTp/btqQ8NQs86T/RxVneNmBhwW1bd1Yfil4z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qWlTp/btqQ8NQs86T/RxVneNmBhwW1bd1Yfil4z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qWlTp/btqQ8NQs86T/RxVneNmBhwW1bd1Yfil4z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqWlTp%2FbtqQ8NQs86T%2FRxVneNmBhwW1bd1Yfil4z1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;310&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;저 비밀번호 변경을 누르면 다음과 같이 나옵니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;308&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbPgk9/btqRavWfLyf/avo778okdfk6Vgl6x64ryk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbPgk9/btqRavWfLyf/avo778okdfk6Vgl6x64ryk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbPgk9/btqRavWfLyf/avo778okdfk6Vgl6x64ryk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbPgk9%2FbtqRavWfLyf%2Favo778okdfk6Vgl6x64ryk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;308&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그다음 이메일을 작성하면 다음과 같이 휴대전화 본인인증 화면이 나올것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;402&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKezPb/btqQ3f09LP1/Auhrpke5BdNZfkjUKNgJek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKezPb/btqQ3f09LP1/Auhrpke5BdNZfkjUKNgJek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKezPb/btqQ3f09LP1/Auhrpke5BdNZfkjUKNgJek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKezPb%2FbtqQ3f09LP1%2FAuhrpke5BdNZfkjUKNgJek%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;402&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;아마 여러분들은 본인인증을 계속 시도했을것이고 이 화면에서 벗어나지 못할것입니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;lt;여러가지 시도&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;일단 저도 정말 이것저것 다 해보았습니다.&lt;/p&gt;
&lt;p&gt;제가 시도해봤던 것들에 대해 정리해보았습니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. VPN을 쓰면 해결이 된다. -&lt;/b&gt; 일단 저는 VPN을 쓰는것을 꺼려해서 사용하지는 않았습니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. 크롬말고 인터넷익스플로러를 사용해봐라 -&lt;/b&gt; 해보았지만 해결되지는 않았습니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. 고객지원 메일 요청하기&lt;/b&gt; - 하단에 나와있는 메일로 보내봤는데 자동회신 메일이 왔었습니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4. 고객지원 전화해보기&lt;/b&gt; - 전화를 해볼려고 했는데, 다른분들이 전화를 안받는다고 해서 시도해보지는 않았습니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;5. 다른 컴퓨터로 해봐라&lt;/b&gt; - 해보았는데 해결되지 않았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;lt;solution&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;우연히 어떤 글을 보았고 그 글에서는 mail자체가 잘못된 것일수도 있다는것입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;그 글을 보고 내 mail 찾기를 해보니 정말 잘못되어 있었습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;결과적으로 내 본인인증 정보랑 이메일이 매칭이 안되어서 핸드폰인증 무한 반복이 되었다는 것입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;일단 핸드폰인증 무한반복을 겪고 계신다면 인증하고자 하는 이메일이 정확히 내 것인지부터 확인하시면 될거 같습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;762&quot; data-filename=&quot;blob&quot; width=&quot;296&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clhIt4/btqRawt22cr/4vVmqip8PIxXAuz0FNhBs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clhIt4/btqRawt22cr/4vVmqip8PIxXAuz0FNhBs0/img.png&quot; data-alt=&quot;로그인 문제 해결 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clhIt4/btqRawt22cr/4vVmqip8PIxXAuz0FNhBs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclhIt4%2FbtqRawt22cr%2F4vVmqip8PIxXAuz0FNhBs0%2Fimg.png&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;762&quot; data-filename=&quot;blob&quot; width=&quot;296&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그인 문제 해결 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;454&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbXtp9/btqRgiIyzl5/RFAWBlr4XvfPgBwFQfRFB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbXtp9/btqRgiIyzl5/RFAWBlr4XvfPgBwFQfRFB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbXtp9/btqRgiIyzl5/RFAWBlr4XvfPgBwFQfRFB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbXtp9%2FbtqRgiIyzl5%2FRFAWBlr4XvfPgBwFQfRFB0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;454&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>5) etc.</category>
      <category>BLIZZARD 인증 해결</category>
      <category>블리자드 무한인증</category>
      <category>블리자드 무한인증 해결법</category>
      <category>블리자드 이메일 오류</category>
      <category>블리자드 인증 오류</category>
      <category>블리자드 휴면 계정 복구</category>
      <category>블리자드 휴면 복구</category>
      <author>Tech_holic</author>
      <guid isPermaLink="true">https://technical-support.tistory.com/108</guid>
      <comments>https://technical-support.tistory.com/108#entry108comment</comments>
      <pubDate>Wed, 23 Dec 2020 15:51:06 +0900</pubDate>
    </item>
    <item>
      <title>[Python] FFT 0Hz Peak 제거 하기, DC 성분 제거하기</title>
      <link>https://technical-support.tistory.com/107</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 Python에서 FFT 를 진행하였을때 0Hz Peak를 제거하는 방법을 소개하려 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AC 전류 값을 취득하는 센서의 신호를 받아서 FFT를 진행했더니 아래 그림과 같이 0Hz에서 amplitude가 굉장히 크게 나타납니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이유는 보통 모든 신호는 AC + DC 로 이루어 집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 전달하려는 AC신호는 극히 작기 때문에 내부 회로에서 증폭이 이루어 지게 되죠!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 DC 신호도 함께 증폭이 되므로 아래와 같은 결과가 나타나는 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;337&quot; data-origin-height=&quot;317&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYpI80/btqOhvdUSHQ/7kkF8QWJH8NOVpaqU1BPUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYpI80/btqOhvdUSHQ/7kkF8QWJH8NOVpaqU1BPUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYpI80/btqOhvdUSHQ/7kkF8QWJH8NOVpaqU1BPUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYpI80%2FbtqOhvdUSHQ%2F7kkF8QWJH8NOVpaqU1BPUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;337&quot; height=&quot;317&quot; data-origin-width=&quot;337&quot; data-origin-height=&quot;317&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 DC 성분을 최소화 시켜 보겠습니다!&lt;/p&gt;
&lt;pre id=&quot;code_1647394957008&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
from scipy.signal import detrend

dc_remove_signal = original_signal - np.mean(original_signal)

dc_remove_signal = detrend(dc_remove_signal)

.
.
.

Y = np.fft.fft(dc_remove_sinal)/NFFT&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;179&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNkJNW/btqOhvrKW1q/lhv5sjko3xP8HKb9Kz6yGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNkJNW/btqOhvrKW1q/lhv5sjko3xP8HKb9Kz6yGK/img.png&quot; data-alt=&quot;DC 성분 제거 후 FFT 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNkJNW/btqOhvrKW1q/lhv5sjko3xP8HKb9Kz6yGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNkJNW%2FbtqOhvrKW1q%2Flhv5sjko3xP8HKb9Kz6yGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;520&quot; height=&quot;179&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;179&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DC 성분 제거 후 FFT 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 간단히 FFT 0Hz 지점의 Peak 문제를 해결했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽어주셔서 감사합니다~!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도움이 되었으면 좋겠네요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>2) Tech</category>
      <category>FFT 0hz Peak</category>
      <category>Python FFT 0hz Peak</category>
      <category>Python 신호 DC 성분 제거</category>
      <category>파이썬 FFT 0Hz Peak</category>
      <author>Technical_Supporter</author>
      <guid isPermaLink="true">https://technical-support.tistory.com/107</guid>
      <comments>https://technical-support.tistory.com/107#entry107comment</comments>
      <pubDate>Thu, 26 Nov 2020 14:57:12 +0900</pubDate>
    </item>
    <item>
      <title>[Python] USB Serial Communication(USB 시리얼 통신)</title>
      <link>https://technical-support.tistory.com/100</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;import&amp;nbsp;&lt;/span&gt;serial&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;import&amp;nbsp;&lt;/span&gt;serial.tools.list_ports as sp&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;br /&gt;list&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;sp.comports()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;connected&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;[]&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;b&gt;## PC 연결된 COM Port 정보를 list에 넣어 확인한다.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;for&lt;span&gt;&amp;nbsp;&lt;/span&gt;i&lt;span&gt;&amp;nbsp;&lt;/span&gt;in&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;list&lt;/span&gt;:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;connected.append(i.device)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006dd7;&quot;&gt;&quot;Connected COM ports: &quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;+&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;str&lt;/span&gt;(connected))&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;b&gt;# ser = serial.Serial(&quot;COM5&quot;, 9600,timeout=1)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;b&gt;# if ser.readable():&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;b&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; res = ser.readline()&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #a6bc00;&quot;&gt;&lt;b&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(res.decode()[:len(res)-1])&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;b&gt;# baudrate 정보와 연결할 COM Port 이름을 입력한다.&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;select_comport&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;input&lt;/span&gt;(&lt;span style=&quot;color: #006dd7;&quot;&gt;'select:'&lt;/span&gt;)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;ser&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;serial.Serial(select_comport,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;9600&lt;/span&gt;, timeout&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;1&lt;/span&gt;)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;b&gt;# 내가 연결할 Device의 명령어 delimiter가 Carrige return + Line Feed라고 하길래 delimeter를 설정해주었다.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;while&amp;nbsp;&lt;/span&gt;True:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006dd7;&quot;&gt;&quot;insert op :&quot;&lt;/span&gt;, end='')&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;op&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;input&lt;/span&gt;()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delimiter&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;'\r\n'&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;op&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;op+delimiter&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;print&lt;/span&gt;(op)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ser.write(op.encode())&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;res&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;ser.readline()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;res_packet&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;res.decode()[:&lt;span style=&quot;color: #ef5369;&quot;&gt;len&lt;/span&gt;(res)-&lt;span style=&quot;color: #409d00;&quot;&gt;1&lt;/span&gt;]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;print&lt;/span&gt;(res_packet)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #006dd7;&quot;&gt;'\n'&lt;/span&gt;)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #0593d3;&quot;&gt;if&amp;nbsp;&lt;/span&gt;op&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;is&amp;nbsp;&lt;/span&gt;'q':&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ser.close()&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>2) Tech</category>
      <category>Python Serial Communication</category>
      <category>Python USB Communication</category>
      <category>Python USB 시리얼 통신</category>
      <category>파이썬 USB 통신</category>
      <category>파이썬 시리얼 통신</category>
      <author>Technical_Supporter</author>
      <guid isPermaLink="true">https://technical-support.tistory.com/100</guid>
      <comments>https://technical-support.tistory.com/100#entry100comment</comments>
      <pubDate>Tue, 24 Nov 2020 21:35:19 +0900</pubDate>
    </item>
    <item>
      <title>[Pytorch Tip!] 파이토치 GPU 사용 설정</title>
      <link>https://technical-support.tistory.com/96</link>
      <description>&lt;p&gt;cuda를 version에 맞게 setting 해주었다면, 사용을 해봐야겠죠?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번시간에는 간단하게 파이토치에서 GPU를 사용가능하도록 하는 명령어를 소개하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;# pytorch gpu 사용법&lt;b&gt;&lt;br /&gt;&lt;br /&gt;import &lt;/b&gt;torch &lt;br /&gt;&lt;br /&gt;&lt;b&gt;USE_CUDA = torch.cuda.is_available() &lt;/b&gt;&lt;br /&gt;&lt;b&gt;print(USE_CUDA)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;device = torch.device('cuda:0' if USE_CUDA else 'cpu') &lt;/b&gt;&lt;br /&gt;&lt;b&gt;print('학습을 진행하는 기기:',device)&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RDlBB/btqJltFAY0V/UHIKJFNoIZIjlAmEa1AXU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RDlBB/btqJltFAY0V/UHIKJFNoIZIjlAmEa1AXU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RDlBB/btqJltFAY0V/UHIKJFNoIZIjlAmEa1AXU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRDlBB%2FbtqJltFAY0V%2FUHIKJFNoIZIjlAmEa1AXU0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;만약 cuda 설정이 안되어있다면, 옆 이미지와 같이&lt;/p&gt;
&lt;p&gt;cpu로 결과가 나오겠죠?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;231&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGvP4X/btqJsipeUk0/60WyKV6g8WdBPjeWjOakH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGvP4X/btqJsipeUk0/60WyKV6g8WdBPjeWjOakH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGvP4X/btqJsipeUk0/60WyKV6g8WdBPjeWjOakH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGvP4X%2FbtqJsipeUk0%2F60WyKV6g8WdBPjeWjOakH0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;231&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;이러한 결과가 나와야 gpu사용이 가능한겁니다!!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;이제, 위에서 선언한 device가 GPU로 설정되었습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;설정된 device에 대한 정보를 확인해보겠습니다.&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;print('cuda index:', torch.cuda.current_device()) &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;print('gpu 개수:', torch.cuda.device_count())&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;print('graphic name:', torch.cuda.get_device_name())&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;cuda = torch.device('cuda')&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;print(cuda)&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;379&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRmigL/btqJltr1xZd/pVFTdcAESPKfMHRiHfE6uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRmigL/btqJltr1xZd/pVFTdcAESPKfMHRiHfE6uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRmigL/btqJltr1xZd/pVFTdcAESPKfMHRiHfE6uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRmigL%2FbtqJltr1xZd%2FpVFTdcAESPKfMHRiHfE6uK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;379&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;이런 식으로 자신의 GPU 정보를 확인하실 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;gpu를 사용 할때는 연산량이 많은 곳에서 사용하면 되는데요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;model compile 또는 loss 연산, 이미지 data read 등이 있겠습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이때 .to(device) 를 붙여주면 gpu로 연산을 진행합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 예시와 같이요!&lt;/p&gt;
&lt;p&gt;ex)&lt;/p&gt;
&lt;p&gt;x_test = mnist_test.test_data.view(-1, 28*28).float()&lt;b&gt;.to(device)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;구체 적인 사용법은 추후에 게시하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;읽어주셔서 감사합니다.&lt;/p&gt;</description>
      <category>2) Tech</category>
      <category>Pytorch CUDA 사용</category>
      <category>pytorch GPU 사용</category>
      <category>Pytorch GPU 설정</category>
      <category>파이토치 cuda 사용</category>
      <category>파이토치 GPU 설정</category>
      <author>Technical_Supporter</author>
      <guid isPermaLink="true">https://technical-support.tistory.com/96</guid>
      <comments>https://technical-support.tistory.com/96#entry96comment</comments>
      <pubDate>Wed, 23 Sep 2020 16:53:21 +0900</pubDate>
    </item>
    <item>
      <title>[PyTorch Study]Tensor 자료형 사이즈 및 차원 변경</title>
      <link>https://technical-support.tistory.com/95</link>
      <description>&lt;p&gt;PyTorch Study 세번째 시간입니다!!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;지난 게시물에 이어 Pytorch Tensor 자료형 응용 2번째 시간입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Tensor 자료형 사이즈 변경&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;# pytorch reshape, view 사용법&lt;br /&gt;&lt;b&gt;&lt;br /&gt;import&lt;/b&gt; torch&lt;br /&gt;&lt;br /&gt;&lt;b&gt;t1 = torch.tensor([1,2,3,4,5,6])&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;print( t1, '\n')&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;t2 = t1.view(2, 3)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;print( t2, '\n')&lt;/b&gt;&lt;br /&gt;&lt;b&gt;print( t1.reshape(2,3), '\n')&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rzJbv/btqJiiKQLST/uXf7lYdx5a74ohkCrU20DK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rzJbv/btqJiiKQLST/uXf7lYdx5a74ohkCrU20DK/img.png&quot; data-alt=&quot;출력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rzJbv/btqJiiKQLST/uXf7lYdx5a74ohkCrU20DK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrzJbv%2FbtqJiiKQLST%2FuXf7lYdx5a74ohkCrU20DK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 코드의 출력을 보시면 reshape, view 의 역할이 감이 오실겁니다!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- torch.tensor().&lt;b&gt;reshape, view&lt;/b&gt;&amp;nbsp;: Tensor 자료형의 사이즈 및 차원 변경시 사용&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;굉장히 많이 사용되므로 사용법을 잘알아 두셔야합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번에는 차원변경 예시를 함께 따라해봅시다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1-1. Tensor 자료형 차원 변경&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;# pytorch reshape, view 사용법&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;br /&gt;t3 = torch.tensor( [[1,2], [3,4], [5,6]] )&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;print( t3, '\n')&lt;br /&gt;&lt;br /&gt;&lt;b&gt;print( t3.size(), '\n')&lt;br /&gt;&lt;br /&gt;&lt;b&gt;print( t3.view(-1), '\n')&lt;br /&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;b&gt;print( t3.view(1, -1), '\n')&lt;br /&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;b&gt;print( t3.view(1, -1).size(), '\n')&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;200&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nvfFg/btqJh4GdsbA/OF7qAkPzSajOjUannYDbq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nvfFg/btqJh4GdsbA/OF7qAkPzSajOjUannYDbq0/img.png&quot; data-alt=&quot;출력 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nvfFg/btqJh4GdsbA/OF7qAkPzSajOjUannYDbq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnvfFg%2FbtqJh4GdsbA%2FOF7qAkPzSajOjUannYDbq0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;200&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출력 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;- view(-1), reshape(-1) : Tensor 자료형 차원 풀기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;- view(n, -1), reshape(n, -1) : Tensor 자료형 차원 풀되, [n x ] 형태로 1차원 유지하기&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;조금 어렵다 싶으면, size함수를 사용해서 직접 찍어보시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번엔 차원을 좀더 늘려서 확인해보겠습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;# pytorch reshape, view 사용법&lt;br /&gt;&lt;br /&gt;&lt;b&gt;t4 = torch.tensor( [[[1,2], [3,4]], [[5,6], [7,8]]] )&lt;br /&gt;&lt;br /&gt;&lt;b&gt;print( t4, '\n')&lt;br /&gt;&lt;br /&gt;&lt;b&gt;print( t4.size(), '\n')&lt;br /&gt;&lt;br /&gt;&lt;b&gt;print( t4.view(-1), '\n')&lt;br /&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;b&gt;print( t4.view(1, -1), '\n')&lt;br /&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;b&gt;print( t4.view(2, -1), '\n')&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;b&gt;print( t4.view(2, -1).size(), '\n')&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;264&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dq6e2a/btqJjF0dKd6/eZMRpekcyh4mrWhx6pxOZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dq6e2a/btqJjF0dKd6/eZMRpekcyh4mrWhx6pxOZ0/img.png&quot; data-alt=&quot;출력 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dq6e2a/btqJjF0dKd6/eZMRpekcyh4mrWhx6pxOZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdq6e2a%2FbtqJjF0dKd6%2FeZMRpekcyh4mrWhx6pxOZ0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;264&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출력 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;3-Tensor의 예시를 보시면 view( , -1) 의 사용법이 더욱 이해가 되실거라 생각됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. torch.cat&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;이번에는 pytorch cat 함수를 사용해보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- &lt;b&gt;torch.cat&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt; : Tensor 자료형 결합시 사용&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Tensor 자료형을 행방향과 열방향으로 각각 결합이 가능하도록 도와주는 함수입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예시로 확인해보죠!&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;# pytorch reshape, view 사용법&lt;br /&gt;&lt;br /&gt;&lt;b&gt;t5 = torch.tensor( [[1,2,5], [3,4,6]] )&lt;br /&gt;t6 = torch.tensor( [[10,20,30], [40,50,60]] )&lt;br /&gt;&lt;br /&gt;print(t5)&lt;br /&gt;&lt;br /&gt;print('\n', t6)&lt;br /&gt;&lt;br /&gt;print('\n', torch.cat( [t5, t6], dim=1)&lt;br /&gt;&lt;b&gt;&lt;br /&gt;print('\n', torch.cat( [t5, t6], dim=0)&lt;/b&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NmxDZ/btqJofsJjtH/AbKdwmaf77EZ5OQh0YWAX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NmxDZ/btqJofsJjtH/AbKdwmaf77EZ5OQh0YWAX1/img.png&quot; data-alt=&quot;출력 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NmxDZ/btqJofsJjtH/AbKdwmaf77EZ5OQh0YWAX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNmxDZ%2FbtqJofsJjtH%2FAbKdwmaf77EZ5OQh0YWAX1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출력 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;torch.cat() 또한 dim을 설정해주어서 어느 방향으로 tensor를 결합할지 결정해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;dim =1 -&amp;gt; 방향&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;dim =0 &lt;span style=&quot;color: #333333;&quot;&gt;&amp;darr; 방향&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 여기서 마무리 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;글이 조금이나마 도움이 되었으면 좋겠습니다!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;읽어주셔서 감사합니다.&lt;/p&gt;</description>
      <category>2) Tech</category>
      <category>Pytorch cat</category>
      <category>Pytorch reshape</category>
      <category>PyTorch Study</category>
      <category>Pytorch tensor 사이즈 변경</category>
      <category>Pytorch view</category>
      <category>Pytorch 텐서 차원변경</category>
      <category>파이토치 reshape</category>
      <category>파이토치 tensor 사이즈 변경</category>
      <category>파이토치 view</category>
      <category>파이토치 스터디</category>
      <author>Technical_Supporter</author>
      <guid isPermaLink="true">https://technical-support.tistory.com/95</guid>
      <comments>https://technical-support.tistory.com/95#entry95comment</comments>
      <pubDate>Wed, 23 Sep 2020 09:04:01 +0900</pubDate>
    </item>
  </channel>
</rss>