Numpy 整理筆記(一):陣列的建立,形狀和計算
阿新 • • 發佈:2018-11-21
What’s numpy?
一個在Python中做科學計算的基礎庫,重在數值計算,也是大部分PYTHON科學計算庫的基礎庫,多用於在大型、多維陣列上執行數值運算
1. 建立陣列
import numpy as np
# 1. 建立陣列
# 呼叫numpy下面的array方法
a = np.array([0,1,2,3])
# b = np.array([0,1,2,3,])
print(a)
# array後面的括號可以跟生成器range()也可以直接跟列表
b = np.array(range(4))
print(b)
# 第二種方法,numpy下的arange方法:別拼錯了,只有一個r: a + range
c = np.arange(4)
print(c)
# 以上結果都是一維矩陣 [0 1 2 3]
# 看一下資料類名
print(type(d))
# <class 'numpy.ndarray'> # 資料的類名
# 看一下資料型別
print(d.dtype) # 資料的型別
# int32
# 資料型別見圖
# 與列表結果區分一下: 列表是有逗號的 [0, 1, 2, 3]
print(list(range(4)))
# 建立二維陣列
# 注意:np別掉了
m1 = np.array([np.arange(3),np.arange(3),np.arange(3) ])
print(m1)
"""
[[0 1 2]
[0 1 2]
[0 1 2]]
"""
2. 檢視陣列形狀(維度)
# 2. 檢視陣列形狀(維度)
# 注意:不是方法
print(m1.shape) # (3, 3)
print(m1.shape[0]) # 第一維的元素個數 是個數個數個數!!!
# print(m1.reshape(2,5)) # 2*5一共有10個,根本就沒有10個元素
# 報錯:ValueError: cannot reshape array of size 9 into shape (2,5)
print(m1.reshape(9,1)) # 9*1=9=3*3
print(m1.shape) # (3, 3) m1還是3*3
# 將二維陣列轉化為一維陣列
m2 = m1.flatten() # 注意和shape用法不一樣,後面需要加括號
print(m2)
3. 陣列和數的計算
# 3. 陣列和數的計算
import numpy as np
# a = np.array([np.arange(5),np.arange(3),np.arange(7)])
# print(a)
# 注意:矩陣必須是規整的,值必須一樣
a = np.array([np.arange(7),np.arange(7),np.arange(7)])
print(a)
"""
[[0 1 2 3 4 5 6]
[0 1 2 3 4 5 6]
[0 1 2 3 4 5 6]]
"""
print(a+1) # 每一位都加1
print(a*5)
print(a/2)
# 原理:numpy的廣播機制,加減乘除的值被廣播到所有元素
# 重點:不同維度陣列計算
b = np.array([np.arange(5),np.arange(5)]) # 4*2
print(b)
c = np.array([np.arange(2),np.arange(2),np.arange(2),np.arange(2)]) # 2*5
print(c)
# b*c 就會報錯:perands could not be broadcast together with shapes (2,5) (4,2)
# 廣播原則,如果是二維陣列:# 行和列至少有一個相同,且不同的倆中至少有1
# 如果是三維陣列需要綜合分析圖
# 見圖
#複習如何建立多維陣列?
a = np.array([[1, 2, 3], [2, 3, 4]]) # 2*3
print(a.shape)
# # 把裡面的np.arange(5)換成列表
# b = np.array([np.arange(2),np.arange(2)]) # 2*2
# print(b.shape)
# 把裡面的np.arange(5)換成列表
# b = np.array([[1],[2]]) # 2*1
# print(b.shape)
b = np.array([[1, 2, 3]]) # 1*3
print(b.shape)
# b = np.array([[1, 2, 3],[1, 2, 3],[1, 2, 3]]) # 3*3
# print(b.shape)
print(a+b) # 行和列至少有一個相同,且不同的倆中至少有1
# 結果
# 2*3和2*1可以 2*3和2*2不行
# 2*3和1*3可以 2*3和3*3不行
# 重點:三維陣列,及三維陣列的計算
# shape為(3, 3, 3)意思是:有3塊,每一塊有3行3列
# 它與shape(3,2) 3行2列的時計算不來的 想象一個魔法,任意一面都和(3,2)不一樣
# 想象一下圖
# shape為(3, 3, 2) 與shape(3,2) 每一塊與(3,2)計算可以
# 與(3,3)依然可以,因為是魔方總有一面是3*3