一、numpy是什么?
- numpy是一个开源的python科学计算库,用于处理任意维度的数组。
- numpy用ndarray处理多维数组。
import numpy as np
np.array创建数组
- 机器学习数据量很大,ndarray速度快。
- ndarray的优势:
- 内存块风格,一体式存储,数据类型一样(存储数据地址连续,直接存取,不需要找地址);
- 支持并行化运算;
- 效率高于python
二、N维数组
数组属性
.shape
.ndim 数组维数
.size 元素数量
.itemsize 元素字节大小
.dtype 元素类型
import numpy as np
a = np.array(["python","hello","i"],dtype = np.string_)
#指定类型
三、数组基本操作
- 生成数组
(1)0,1数组,固定范围数组
import numpy as np
#生成0、1数组
ones = np.ones([4,8])
np.zeros_like(ones)
#生成现有数组
a = np.array([[1,2,3],[4,5,6]])
a1 = np.array(a)#深拷贝
a2 = np.asarray(a)#浅拷贝
a[0,0]=1000###a1不变;a2改变
#生成固定范围数组
np.linspace(0,100,10)#等差数组,指定差值
np.arange(10,50,2)#等差数组,指定步长
np.logspace(0,2,3)#10的次方
(2) 正态分布
import numpy as np
import matplotlib.pyplot as plt
#生成正太分布
x1 = np.random.normal(1.75,1,1000)
plt.figure(figsize=(20,8),dpi=100)
plt.hist(x1,100)
plt.show()
(3) 均匀分布
import numpy as np
import matplotlib.pyplot as plt
#生成正太分布
x1 = np.random.uniform(-1,1,1000)
plt.figure(figsize=(20,8),dpi=100)
plt.hist(x2,100)
plt.show()
-
数组的索引、切片
对象[:,:] 先行后列 -
数组的形状修改
(1)reshape 展成一行,重新排列
(2)resize
(3)T 转置 -
数组的类型修改
ndarray.astype(type)
ndarray.tostring()
- 数组的去重
np.unique()
四、数组的运算
- 逻辑运算
大于小于和赋值。
大于号可以直接判断数组里的值,赋值在判断结果说赋值
#生成10名同学,5门功课的数据
score=np.random.randint(40,100,(10,5))
#取出最后4名同学的成绩,
用于逻辑判断
test_score = score[6:,0:5]
#逻辑判断,如果成绩大于60就标记为True否则为False
test_score > 60
array([[True,True,True,False,True],
[True,True,True,False,True],
[True,True,False,False,True],
[False,True,True,True,True]])
#B00L赋值,将满足条件的设置为指定的值-布尔索引
test_score[test_score > 60] = 1
test_score
array([1,1,1,59,1],
[1,1,1,59,1],
[1,1,44,44,1],
[59,1,1,1,1]])
- 通用函数
np.all, np.any
#判断前两名同学的成绩[0:2,:]是否全及格
np.all(score[0:2,:]>60)
False
#判断前两名同学的成绩[0:2,:]是否有大于90分的
np.any(scoret[0:2,:]>90)
True
- 数组与数值运算,对数组中所有值都与数值运算;注意,对列表运算,乘积会复制粘贴
- 数组与数组运算
广播机制:数组在进行矢量化运算时,要求数组的形状是相等的。当形状不相等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样,就可以进行矢量化运算了。下面通过一个例子进行说明:
arr1=np.array([[0],[1],[2],[3])
arr1.shape
#(4,1)
arr2 np.array([1,2,3])
arr2.shape
#(3,)
arrl+arr2
#结果是
array([[1,2,3],
[2,3,4],
[3,4,5],
[4,5,6])
广播机制实现了时两个或两个以上数组的运算,即使这些数组的shape不是完全相同的,只需要满足如下任意一个条件即可。
- 数组的某一维度等长。
- 其中一个数组的某一维度为1。
广播机制需要扩展维度小的数组,使得它与维度最大的数组的shape值相同,以便使用元素级函数或者运算符进行运算。