# 引入numpy 重命名爲np
import numpy as np
# 生成一個numpy中的一維數組
# numpy中的數組,存儲的所有數據必須是同質(相同類型)的
a_arr = np.arange(10)
b_arr = np.arange(10)
# 直接使用數組做向量運算的,會把運算作用到數組中的每一個元素中
c_arr = a_arr * b_arr
# 創建數據的幾種方式
# 隨機產生一個指定維度的隨機數數組
# 1.維度數 2.各維度大小
data = np.random.rand(2,3)
print(data)
print('維度個數',data.ndim)
print('各維度大小',data.shape)
print('數據類型',data.dtype)
# python中列表轉換numpy中的數組
list1 = range(10)
print(type(list1))
<class 'range'>
# 轉換爲數組
arr = np.array(list1)
print(type(arr))
<class 'numpy.ndarray'>
# 嵌套列表轉換爲ndarray
list2 = [range(10),range(10,20)]
type: class 'list'
[range(0, 10), range(10, 20)]
arr = np.array(list2)
type: class 'numpy.ndarray'
[[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]]# zeros() \ ones() \ empty()函數 創建數組
# 使用zeros()創建指定維度,指定數據類型的數組
# 1.維度信息 2.指定類型
# 如果不指定數據類型,默認全部是0.的float64的數據
zeros_arr = np.zeros((2,3),np.int32)
# 使用ones()函數創建指定維度,指定數據類的數組
# 不指定數據類型,默認是全部爲1的float64類型的數據
ones_arr = np.ones((2,3),np.int32)
# 使用empty()函數創建指定爲度的數組
# 不指定數據類型,默認爲全部爲1的float64的數據
empty_arr = np.empty((2,3))
# 如果想要一個空字符串的數組,可以指定數據類型爲np.str
empty_arr_str = np.empty((2,3),np.str)
# 創建對角線數據全部爲1的數組 數字是幾就是有幾行
identity_arr = np.identity(3,dtype=np.int64)
# 數據類型
# 創建一個數組,指定數據類型
zeros_arr = np.zeros((3,3),np.int64)
# astype()函數,轉換數組中的數據類型
zeros_float_arr = zeros_arr.astype(np.float64)
# 存儲數據爲小數類型,轉換爲整數類型
data_arr = np.array([1.45,2.34,3.14,4.6,6.6,7.8])
# 將float64數據類型轉換爲整數int64類型,只保留整數部分
int_data_arr = data_arr.astype(np.int64)
# 數組的運算
arr = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[4,5,6],[7,8,9]])
# 乘法運算 會把運算作用數組中的每一個元素中 arr*3
# 乘方 arr**2
# 矩陣(數組)加減乘除運算 arr+arr arr-arr2 arr/arr2 arr*arr2
# BMI體重計算器,計算若干人員的身高體重比
# BMI = 體重/身高(m)^2
# 有兩個數組,一個存放體重 一個存放身高 將身高體重一一計算,把計算結果放入數組
# 1.列表進行運算
weight_list = [65,75,85]
height_list = [1.7,1.75,1.8]
result =[]
for x in range(len(weight_list)):
bmi = weight_list[x]/(height_list[x]*height_list[x])
result.append(bmi)
print(result)
# 2.array數據運算
w_arr = np.array(weight_list)
h_arr = np.array(height_list)
# 直接使用數組做向量運算
rs_arr = w_arr/(h_arr**2)
print(rs_arr)
# 表達式返回的是存放布爾類型化數據數組
is_ok = rs_arr >=23
print(is_ok)
print(is_ok.dtype)
# 通過is_ok數據可以將數組中數據取出來
# 取出bmi大於等於23的身高和體重
# 把True對應的數據取出來
w_rs = w_arr[is_ok]
print(w_rs)
h_rs = h_arr[is_ok]
print(h_rs)
# 條件索引
year_arr = np.array([
[2000,2013,2015],
[2008,2019,2007],
[2010,2012,2017]
])
# 篩選出大於等於2015的年份
is_year_after = year_arr >= 2015
print(is_year_after)
# 根據篩選的結果布爾數據取出數據
filter_year = year_arr[is_year_after]
# 等同於上面的寫法
filter_year = year_arr[year_arr>=2015]
# 多個條件同時成立
filter_year = year_arr[(year_arr>=2007)&(year_arr%4==0)]
# 多個條件有一個成立即可 | 或者
filter_year = year_arr[(year_arr>=2007)|(year_arr%2==0)]
# 數組的切片
arr = np.arange(10)
# 數據中的索引從0開始,依次+1
# 切片
print(arr[2::3]) 從索引2開始隔三個數取數
# reshape()把一維數組轉換爲多維數組
# 轉換之後的數據總個數必須等於轉換之前的個數
arr2 = np.arange(12).reshape(3,4)
# 多維數組通過組合索引取值
print(arr2[1,1])
# 切片
print(arr2[0:2])
print(arr2[0:2,2:])
print(arr2[:,1:3])
# 數組的轉置
arr3 = np.random.rand(2,3)
arr4 = arr3.transpose()
arr5 = arr4.reshape(6)
import numpy as np
# 隨機生成一個二維數組
arr = np.random.rand(2,3)
# 向上取整 np.ceil(arr)
# 向下取整 np.floor(arr)
# 四捨五入 np.rint(arr)
# 判斷數組中的元素是否爲空 NaN np.isnan(arr)
# 讓數組中的元素相乘
arr1 = np.arange(10).reshape(5,2)
arr2 = np.array([
[5,2],
[2,5],
[3,4],
[1,2],
[3,7]
])
print(arr1*arr2) print(np.multiply(arr1,arr2))
# 相除
print(np.divide(arr1,arr2。astype(np.float64)))
# 常用的統計函數
arr = np.arange(10).reshape(5,2)
# 相加 print(np.sum(arr))
# 計算平均數 print(np.mean(arr))
# 最大值 print(np.max(arr))
# 最小值 print(np.min(arr))
# 方差 print(np.var(arr))
# 標準差 print(np.atd(arr))
# 最大值的下標(索引) print(np.argmax(arr))
# 最小值的下標(索引) print(np.argmin(arr))
# 累加計算 print(np.cumsum(arr))
# 累乘 print(np.cumprod(arr))
# where() 函數
arr = np.random.rand(2,3)
# 更改數組中的數據
arr[0,1] = 1
# where()函數
# 1.條件 2.條件成立時取得數據 3.條件不成立時 取得數據
print(np.where(arr>0.5,1,0))
# any()函數 表示數組中至少有一個符合條件的元素,返回True,否則返回False
print(np.any(arr>=1))
# all()函數 表示數組中的元素必須全部符合條件時,返回True,否則返回False
print(np.all(arr>=0.5))
# unique() 返回數組中的唯一值,返回一個排好序的一維數組
arr1 = np.array([[4,6,3],[1,2,3],[4,5,6]])
print(np.unique(arr1))