height = [170,173,178,180,183]
weight = [76,65,70,77,75]
'''求BMI指数:身体质量指数=体重(KG)/身高(m)的平方'''
data_list = []
for i in range(5):
data_list.append(weight[i]/((height[i]/100)**2))
data_list
w = np.array(weight)
h = np.array(height)
res = w/(h/100)**2
res
"""
1.numpy数组能够直接数学快速运算
2.numpy的数学计算速度要比python快N多倍
"""
import time
import random
h = []
w = []
for i in range(10000000):
h.append(random.randint(153,180))
w.append(random.uniform(51,88))
start_time = time.time()
bmi = []
for i in range(10000000):
bmi.append(w[i]/(h[i]/100) ** 2)
print(time.time() - start_time)
H = np.array(h)
W = np.array(w)
start_time = time.time()
BMI = W/(H/100)**2
print(time.time() - start_time)
数组
numpy中的数组与python中的列表对比
[1,2,3,4,5]
res = np.array([1,2,3,4,5])
print(res)
数组分类
1.一维数组(常用)
ar1 = np.array([1,2,3,4,5,6,7,8,9])
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
2.二维数组(频繁)
ar2 = np.array([[1,2,3,4,5] , [6,7,8,9,10]])
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])
3.三维数组(少用)
ar3 = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
array([[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]])
"""
数组既可以使用python的列表创建也可以使用python元组创建
"""
numpy中的数据类型
虽然numpy仅仅是python的一个模块,但是它有自己的数据类型
由于numpy主要是用来计算的,所以基本上都是数字相关的数据类型
布尔型 bool_
整型 int_ int8 int16 int32 int64
int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数
无符号整型 uint8 uint16 uint32 uint64
浮点型 float_ float16 float32 float64
复数型 complex_ complex64 complex128
"""
numpy中的数据类型名称为了避免跟python冲突
所有同名的数据类型名称都会在最后加下划线
"""
数组的特点
1.数组内所有的元素肯定是相同的数据类型
2.数组的大小无法修改
3.数组的数学运算默认都是挨个元素挨个元素逐一运算
a = array([1,2,3])
a + 1
4.数组之间做运算一定要确保彼此之间列相同
常用方法
li1 = [
[1,2,3],
[4,5,6]
]
a = np.array(li1)
a.T
"""
a.T
array([[1, 4],
[2, 5],
[3, 6]])
a
array([[1, 2, 3],
[4, 5, 6]])
"""
a.dtype
a.size
ar1 = np.array([1,2,3,4])
ar1.ndim
a.shape
a.reshape(1,6)
a.reshape(3,2)
创建方式
l = [1,2,3]
res = np.array(l,dtype='float')
res.dtype
np.arange(0,10,2)
np.arange(1.2,2.2,0.4)
np.linspace(1,10,20)
np.zeros((2,3),dtype='int')
'float'
np.ones((3,3),dtype='int')
np.empty((3,3))
np.eye(5,5)
索引、切片
'''一维数组与列表在索引和切片上的操作一致'''
age = np.array([13,19,22,14,19,11])
age[1]
age[-1]
age[1:3]
'''二维数组在索引和切片上有新的知识'''
ar2 = np.array([[1,2,3,4],[6,7,8,9],[22,33,44,55]])
ar2[1,2]
ar2[0:2,1:3]
ar2[1:,]
花间索引(间断索引)
ar1 = np.array([11,22,33,44,55,66,77])
ar1[[0,2,3,6]]
布尔索引(逻辑索引)
age = np.array([13,19,22,14,19,11,55,78,22,16])
age>18
age[age>18]
运算符
+ - * /
% 数组对应元素商的元素
// 数组对应元素商的整除数
** 数组对应元素的幂指数
比较运算符
>
np.greater(arr1,arr2)
>=
np.greater_equal(arr1,arr2)
<
np.less(arr1,arr2)
<=
np.less_equal(arr1,arr2)
==
np.equal(arr1,arr2)
!=
np.not_equal(arr1,arr2)
数学函数 对数组数据进行数学函数运算
np.round(arr)
对各元素四舍五入
np.sqrt(arr)
计算各元素的算术平方根
np.square(arr)
计算各元素的平方值
np.exp(arr)
计算以e为底的指数
np.power(arr, α)
计算各元素的指数
np.log2(arr)
计算以2为底各元素的对数
np.log10(arr)
计算以10为底各元素的对数
np.log(arr)
计算以e为底各元素的对数
***统计函数 √
res = np.array([[ 80.5, 60., 40.1, 20., 90.7],
[ 10.5, 30., 50.4, 70.3, 90.],
[ 35.2, 35., 39.8, 39., 31.],
[91.2, 83.4, 85.6, 67.8, 99.]])
'''简单需求:全部元素'''
np.min(res)
np.max(res)
np.mean(res)
np.sum(res)
np.median(res)
np.std(res)
np.var(res)
'''复杂需求:以行列为单位'''
np.min(res,axis=0)
np.min(res,axis=1)
'''不借助与axis参数'''
for i in range(res.shape[0]):
print(np.sum(res[i]))
for j in range(res.shape[1]):
print(np.mean(res[:,j]))
随机数模块
import random
np.random.rand(3,3)
np.random.randint(4,size=(3,3))
np.random.choice(10,2)
res = [1,2,3,4]
res1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
np.random.shuffle(res1)
res1
np.random.uniform(0,10,100)
np.random.normal(1,5,100)