1. 程式人生 > >Numpy 整理筆記(一):陣列的建立,形狀和計算

Numpy 整理筆記(一):陣列的建立,形狀和計算

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

在這裡插入圖片描述