Python之Numpy初識
Python之Numpy初識
http://mp.weixin.qq.com/s/Z4-bXq61XPIL2J87Twipiw
今天翻了下計劃,要學習Numpy了,所以得調動腦細胞的積極性,看看能有什麼收穫。
首先得了解下什麼是Numpy,從我的印象中,一般提到這個工具都會和機器學習關聯起來了。當然和實際的理解又很多的差距。
簡單來說,Python本身不是設計為科學計算的語言,但是Python隨著使用的普及和大量的擴充套件,這方面的需求會越來越大,於是有了Numpy來作為補充。
下載Numpy可以使用pip,一個命令即可搞定pip install numpy,大概10多M
Numpy相比TensorFlow的環境搭建要容易多了,校驗的方式也很簡單,import即可。
>>> import numpy
如果要檢視版本可以使用如下的方式。
>>> numpy.version.full_version
'1.13.3'
>>>
當然我們可以指定別名,使用起來更簡便一些,我們後續的測試都是這麼玩。
>>> import numpy as np
>>> np.version.full_version
'1.13.3'
我們先來熱熱身。
得到一個範圍10以內的整數串,確切的說是陣列。
>>> a = np.arange(10)
>>> print a
[0 1 2 3 4 5 6 7 8 9]
列印出來看是陣列了
>>> type(a)
<type 'numpy.ndarray'>
然後我們變個花樣,把這個陣列改造成一個2部分,每一部分是5個。
>>> a = a.reshape(2,5)
>>> print a
[[0 1 2 3 4]
[5 6 7 8 9]]
可以繼續重構,重構成20個元素,然後分成4部分,每個部分就是5個元素
>>> a = np.arange(20)
>>> a = a.reshape(4,5)
>>> print a
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
還可以構造高維的陣列,比如下面這樣。
>>> a = a.reshape(2,2,5)
>>> print a
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]]
[[10 11 12 13 14]
[15 16 17 18 19]]]
>>>
如果輸入(2,2,6)就不可以了,明顯的2*2*6=24,已經溢位了。
>>> a = a.reshape(2,2,6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: cannot reshape array of size 20 into shape (2,2,6)
>>>
我們得到陣列的維度
>>> a.ndim
3
得到陣列各維度的大小
>>> a.shape
(2L, 2L, 5L)
檢視陣列的元素個數
>>> a.size
20
然後我們建立陣列,可以轉換列表來得到,
>>> raw = [0,1,2,3,4]
>>> a = np.array(raw)
>>> a
array([0, 1, 2, 3, 4])
>>> print a
[0 1 2 3 4]
換個略微複雜的,也是一樣的操作。
>>> raw = [[0,1,2,3,4],[5,6,7,8,9]]
>>> b = np.array(raw)
>>> b
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>>
如果要得到顯示為0的陣列,可以使用這種方式zeros
>>> d = (4,5)
>>> np.zeros(d)
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
當然效果不理想都顯示了小數點,可以格式化,改成整型
>>> np.ones(d,dtype=int)
array([[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]])
得到隨機數,一口氣生成5個。
>>> np.random.rand(5)
array([ 0.61643689, 0.15915655, 0.20558268, 0.75157157, 0.50395262])
按照這個思路,隨機生成100個也是秒級。
再來看看陣列運算
這個部分就逐漸顯示出優勢了,可以支援計算。
>>> a = np.array([[1,2],[2,5]])
>>> print a
[[1 2]
[2 5]]
>>> b = np.array([[2,3],[5,8]])
>>> print a+b
[[ 3 5]
[ 7 13]]
得到一些最大值,最小值。
>>> a = np.arange(20).reshape(4,5)
>>> print a
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
>>> print str(a.sum())
190
>>> print str(a.max())
19
>>> print str(a.min())
0
>>> print str(a.max(axis=1))
[ 4 9 14 19]
>>>
可以很容易的變換。
>>> b = np.arange(2,45,3).reshape(5,3)
>>> b = np.mat(b)
>>> print b
[[ 2 5 8]
[11 14 17]
[20 23 26]
[29 32 35]
[38 41 44]]
如果最大的數是2,從0開始,取5個數是這樣的寫法
>>> np.linspace(0,2,5)
array([ 0. , 0.5, 1. , 1.5, 2. ])
如果是9個數,則是如下的方式。
>>> np.linspace(0,2,9)
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
>>>
>>> a = np.array([[3,2],[5,9]])
>>> print a[0][1]
2
>>> print a[1][0]
5
>>> print a[1,0]
5
>>> b = a
>>> a[0][1]=100
>>> print a
[[ 3 100]
[ 5 9]]
>>> print b
[[ 3 100]
[ 5 9]]
上面的結果看起來有些奇怪,其實問題的原因是:Python不是真正將a複製一份給b,而是將b指到了a對應資料的記憶體地址上。
可以使用copy來規避。
>>> a = np.array([[3,2],[5,9]])
>>> b = a.copy()
>>> a[0][1] = 100
>>> print a
[[ 3 100]
[ 5 9]]
>>> print b
[[3 2]
[5 9]]
指定列
>>> a = np.arange(20).reshape(4,5)
>>> print a
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
>>> print a[:,[1,3]]
[[ 1 3]
[ 6 8]
[11 13]
[16 18]]
按列拼接兩個向量成一個矩陣:
>>> a = np.array((1,2,3))
>>> b = np.array((2,3,4))
>>> print np.column_stack((a,b))
[[1 2]
[2 3]
[3 4]]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2149799/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python之numpy庫[1]Python
- python之numpy庫[2]Python
- Python之numpy學習Python
- 初識pythonPython
- Python資料分析之numpyPython
- 【機器學習】--Python機器學習庫之Numpy機器學習Python
- python綜合學習七之TensorFlow初識Python
- python非同步程式設計之asyncio初識Python非同步程式設計
- 初識tsfresh in PythonPython
- 【Python資料科學】之NumpyPython資料科學
- 【轉】Python之Numpy詳細教程Python
- python---之numpy.pad()Python
- Python基礎初識Python
- python初識引數Python
- 筆記:初識Python筆記Python
- Python資料分析與展示之『Numpy』Python
- 初識Kotlin之集合Kotlin
- RabbitMQ系列之---初識RabbitMQMQ
- NumPy之:NumPy簡介教程
- python基礎知識之函式初階——閉包Python函式
- 1.5.1 Python函式初識Python函式
- python 初識物件導向Python物件
- 初識psycopg In Python on PostgreSQLPythonSQL
- 初識Python裝飾器Python
- 初識python web框架-- DjangoPythonWeb框架Django
- 初識NIO之Java小DemoJava
- python3 numpy的一些小知識點Python
- 2.1.0 Python初識物件導向Python物件
- python綜合學習四之Numpy和Pandas(下)Python
- Python學習之Pandas和Numpy的區別!Python
- Python教程學習:初識Python-01Python
- MyBatis 框架系列之基礎初識MyBatis框架
- 初識Javaweb之Servlet以及TomcatJavaWebServletTomcat
- 運維之shell指令碼初識運維指令碼
- hook初識之inline hookHookinline
- 初識python必知的6個知識點Python
- numpy知識點筆記筆記
- Python GUI介面程式設計-初識PythonGUI程式設計