Python numpy array 陣列

本篇要介紹使用 python 搭配 numpy 模組存放陣列資料,讓你在處理大型陣列資料時能夠快速地處理!而且最厲害的是還可以支援陣列運算唷!

當 Python 處理龐大資料時,其原生 list 效能表現並不理想,
我自己覺得使用 numpy 好處是可以整個陣列作運算,例如:

Read More

Git commit 檔案的某幾個小部分修改

有時候想要 commit 某檔案的一小部分修改,一直不知道 git 有沒有這功能,結果是有的!

在 git add 後面接上-p--patch 再接檔名。

1
git add -p <file>

之後就會提示你哪段區塊要不要加入 stage area,按y加入, 按n不要加入。

參考
Commit only part of a file in Git - Stack Overflow
https://stackoverflow.com/questions/1085162/commit-only-part-of-a-file-in-git

Python 使用 numpy 讀取 csv 資料再畫圖

本篇要介紹如何是用 python 搭配 numpy 模組讀取 csv 的資料,之後再用 matplotlib 把資料 plot 畫圖呈現出來。

使用範例

這是 data.csv 的內容如下,

data.csv
1
2
3
4
1,0.1,0.2,0.3,1,2,3,4
2,0.4,0.5,0.6,5,6,7,8
3,0.7,0.8,0.9,9,10,11,12
4,1,1.1,1.2,13,14,15,16

numpy 有提供從檔案取資料的函式叫 genfromtxt(),不用自己寫很方便吧!立馬就拿它來讀取 csv 檔吧!

numpy_plot_example.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

np1 = np.genfromtxt('data.csv', delimiter=',')
print(np1)

time = np1[:, 0]
data = np1[:, 4]
plt.plot(time, data, label='data')
plt.xlabel('time')
plt.legend()
plt.show()

輸出:

1
2
3
4
[[ 1.   0.1  0.2  0.3  1.   2.   3.   4. ]
[ 2. 0.4 0.5 0.6 5. 6. 7. 8. ]
[ 3. 0.7 0.8 0.9 9. 10. 11. 12. ]
[ 4. 1. 1.1 1.2 13. 14. 15. 16. ]]

畫出來的結果如下圖:

相關主題
Python 使用 matplotlib 畫圖

C/C++ 入門教學目錄

本篇 C/C++ 教學彙整了 ShengYu 過往學習 C/C++ 的知識,在此整理成 C/C++ 教學目錄以便日後的查詢與新手入門學習。

C/C++ 基礎教學

這邊列出一些 C/C++ 基礎觀念的文章,
C/C++ 三元運算子
C/C++ struct 用法與範例
C/C++ enum 用法與範例
C/C++ union 用法與範例
C/C++ const 的 3 種用法與範例
C/C++ static 的 5 種用法
C/C++ extern 用法與範例
C/C++ call by value傳值, call by pointer傳址, call by reference傳參考 的差別
C/C++ 函式回傳參考用法 function return by reference
C/C++ 不定長度參數
C++ exception 例外處理
C++ static_assert 與 assert 的差異

檔案處理
C++ 讀檔,讀取txt文字檔各種範例
C++ 寫檔,寫入txt文字檔各種範例
C/C++ 判斷資料夾是否存在
C/C++ 判斷檔案是否存在

字串處理
C/C++ 字串轉數字的4種方法
C/C++ 整數轉字串的方法與範例
C/C++ 字串比較的3種方法
C/C++ 字串連接的3種方法
C/C++ 字串搜尋的3種方法
C/C++ 字串分割的3種方法

演算法處理
C/C++ 3個求最大值的方法
C/C++ 3個求最小值的方法
C/C++ 字串反轉 reverse
C/C++ bubble sort 泡沫排序法
C/C++ selection sort 選擇排序法

其他
C/C++ Linux/Unix pthread 建立多執行緒用法與範例
C/C++ sleep 用法與範例
C++ 計算程式執行時間
C++ 取得系統當前時間

C/C++ 進階教學

這邊列出一些 C/C++ 進階觀念的文章,
C++ new 動態記憶體配置 / delete 釋放記憶體用法與範例
C++ nullptr 與 NULL 的差異
C++ explicit 用法與範例
C++ 類別樣板 class template

物件導向
C++ virtual 的兩種用法

STL 標準函式庫

這邊放 C++ STL (Standard Template Library) 標準函式庫的用法與範例,
容器相關
std::string 用法與範例
std::vector 用法與範例
std::list 用法與範例
std::stack 用法與範例
std::queue 用法與範例
std::deque 用法與範例
std::set 用法與範例
std::unordered_set 用法與範例
std::map 用法與範例
std::multimap 用法與範例
std::unordered_map 用法與範例

執行緒相關
std::this_thread::sleep_for 用法與範例
std::thread 用法與範例
std::mutex 用法與範例
std::condition_variable 用法與範例
std::async 用法與範例

演算法相關
std::sort 用法與範例
std::find 用法與範例
std::random_shuffle 產生不重複的隨機亂數
std::max 用法與範例
std::min 用法與範例
std::max_element 用法與範例
std::min_element 用法與範例

檔案操作
std::filesystem::copy 複製檔案的用法與範例
std::filesystem::exists 判斷檔案是否存在的用法與範例
std::filesystem::create_directory 建立資料夾的用法與範例

其它
std::shared_ptr 用法與範例
std::unique_ptr 用法與範例
std::atomic 用法與範例
std::atomic_flag 用法與範例
std::function 用法與範例
std::ref 用法與範例
std::string::find 搜尋字串用法與範例

進階
std::thread 怎麼實作的?
std::mutex 怎麼實作的?
std::condition_variable 怎麼實作的?

pthread 執行緒函式庫

這邊是 pthread 執行緒函式庫相關的用法與範例,
pthread 建立多執行緒用法與範例
pthread_join 用法與範例
pthread_detach 用法與範例
pthread_exit 用法與範例
pthread_setname_np 設定執行緒名稱用法
pthread_attr_getstacksize 取得執行緒堆疊大小用法
pthread_attr_setstacksize 設定執行緒堆疊大小用法
pthread 讓執行緒跑在指定 CPU 的方法 pthread_setaffinity_np
Linux/Unix 讓執行緒跑在指定 CPU 的方法 sched_setaffinity

設計模式

這邊放設計模式的用法與範例,
C++ 設計模式 - 單例模式 Singleton Pattern

Linux 常用指令教學懶人包

本篇 ShengYu 彙整了 Linux 常用指令,這些 Linux 常用指令是過往我所學習的知識,在此整理成教學目錄以便日後的查詢與新手入門學習。

Linux 常用指令

以下為 Linux 的常用基本指令,
ls 指令 - 列出檔案與目錄
cut 指令 - 字串處理
sed 指令 - 字串取代
find 指令 - 尋找檔案或尋找資料夾
grep 指令 - 搜尋字串
ag 指令 - 搜尋字串(比 grep 還快)
grep/ack/ag 指令 - 搜尋字串
tee 指令 - 同時螢幕標準輸出和輸出到檔案
xargs 指令 -參數列表轉換
tail 指令 -持續監看檔案輸出
du 指令 - 查詢硬碟剩餘空間/資料夾容量
kill 指令 - 砍掉指定的 process name
zip/unzip 指令 - 壓縮/解壓縮
7z 指令 - 壓縮/解壓縮
convert 指令 - 圖片格式轉換工具
vim 指令 - 文字編輯器
tmux 指令 - 終端機管理工具
wget 指令 - 下載檔案
rsync 指令 - 同步最近修改的檔案/遠端同步資料檔案
nc 指令 - 測試UDP有沒有通
wc 指令 - 計算數量
df 指令 - 查看硬碟容量
cat 指令 - 將檔案內容印出來
awk 指令

開發除錯工具

這邊是 Linux 下開發時常用的輔助工具,
nm 用法與範例
objdump 用法與範例
readelf 用法與範例
ldd 指令查看執行檔執行時需要哪些 library

其他指令

以下為 Linux 的其他指令,
base64 編碼解碼指令用法與範例
sendmail 寄信指令用法與範例
sort 排序用法與範例
uniq 去除連續重複用法與範例
dos2unix 轉換 dos 換行字元用法與範例

Python 在 Windows 下使用 Pycharm 教學

本篇是介紹 Python 如何在 Windows 下安裝使用 Pycharm 的教學,本篇 pycharm 教學會逐步從下載安裝檔開始到安裝完畢,最後是設定 anaconda 的 interpreter 教學。

PyCharm 是一個 IDE,主要用於 Python 程式語言開發,由捷克公司 JetBrains 開發出來的 IntelliJ IDEA 軟體所開發而成的,與 Android Studio 一樣,PyCharm 支援跨平台,支援 Windows, macOS 和 Linux。

以下篇幅分為幾部份,分別為:
下載安裝 pycharm
在 pycharm 中設定 anaconda 的 interpreter

下載安裝 pycharm

進入下列連結安裝社群版 Community
https://www.jetbrains.com/pycharm/download/#section=windows

環境:win7
我使用的版本為 pycharm-community-2018.3.4
安裝步驟如下圖:

Read More

開源專案FindHotelOnMyTrip-訂飯店的輔助工具

介紹

因為最近在比較出國期間哪段日期哪間飯店比較便宜,所以用 python 寫了一個小工具,
選定飯店與多個指定日期,執行後即可連續開啟多個 Agoda 分頁(我比較常用 Agoda),再自行比較出最便宜的飯店期間!

實際效果圖如下:

這是個輔助的小工具,還有很多功能沒有實現,
不過對於現狀使用是足夠的,有想到什麼改進的地方會再進行修改😂!

喜歡我這個小工具的人也歡迎到我的 github 跟我討論或給我星星,或者透過捐獻方式,會讓我更有動力改善這個專案!
Github 連結:https://github.com/shengyu7697/FindHotelOnMyTrip

其它相關文章推薦
開源專案ScreenCapture-螢幕截圖自動存檔小工具
開源專案CursorJail-滑鼠鎖定工具
開源專案-2048
開源專案-tetris俄羅斯方塊
開源專案-數獨sudoku
開源專案-金庸群俠傳
開源專案-仙劍奇俠傳

Ubuntu 製作 gif

本篇介紹如何在 Ubuntu 下製作 gif,
先安裝 imagemagick 套件

1
sudo apt-get install imagemagick

將圖片轉 gif 指令

1
2
3
convert -delay 30 -loop 0 *.JPG output.gif
# delay: 1 為 0.01 秒 (100 為 1秒)
# loop: 0 表示 infinite loop

合併多個 gif 指令

1
convert -delay 30 -loop 0 *.gif output.gif

將影片轉換為 gif 指令
參考如何在Ubuntu 16.04中創建GIF動圖

參考
如何在ubuntu中製作gif檔
如何在Ubuntu 16.04中創建GIF動圖

Ubuntu 縮小圖片

本篇介紹如何在 Ubuntu 縮小圖片,尤其是批次縮小圖片這種重複性工作,在 Ubuntu 下有個指令可以完成這些工作,
先安裝下列套件

1
sudo apt-get install imagemagick

方法一

這個方法縮小之後會生成一堆的 “small-*” 前綴字的文件名,
例如:原檔名為 IMG123.JPG, IMG124.JPG, IMG125.JPG
轉檔後檔名為 small-0.JPG, small-1.JPG, small-2.JPG

1
convert -resize 20%x20% ./*.JPG small

方法二 (建議使用, 保留原檔名)

這個方法是縮小圖片並保留原檔名, 以 small- 為前綴字,
例如:原檔名為 IMG123.JPG, IMG124.JPG, IMG125.JPG
轉檔後檔名為 small-IMG123.JPG, small-IMG124.JPG, small-IMG125.JPG

1
for img in `ls *.JPG`; do convert -resize 20%x20% $img small-$img; done