'''
① 使用np.array()创建两个数组x和y
② np.allclose(x, y)检查两个数组x和y的所有对应元素是否相等。
全部相等则返回True,否则返回False。这里应该是False。
通过设置 rtol 参数来调整允许的相对误差。如果所有元素的相对差异小于等于 rtol,则返回 True,
否则返回 False。同时也可以使用atol来设置绝对误差。
③ np.isclose(x, y)类似,返回的是对应元素是否相等或相近。
'''import numpy as np
x = np.array([1,2,3,4.001,5])
y = np.array([1,1.999,3,4.01,5.1])print(np.allclose(x, y))print(np.allclose(x, y, rtol=0.2))# 设置相对误差参数print(np.allclose(x, y, atol=0.2))# 设置绝对误差参数print(np.isclose(x, y))print(np.isclose(x, y, atol=0.2))'''
False
True
True
[ True False True False False]
[ True True True True True]
'''
3. 修改数组中的元素值
>>> x = np.arange(8)>>> x
array([0,1,2,3,4,5,6,7])>>> np.append(x,8)# 返回新数组,在尾部追加一个元素
array([0,1,2,3,4,5,6,7,8])>>> np.append(x,[9,10])# 返回新数组,在尾部追加多个元素
array([0,1,2,3,4,5,6,7,9,10])>>> x # 不影响原来的数组
array([0,1,2,3,4,5,6,7])>>> x[3]=8# 使用下标的形式原地修改元素值>>> x # 原来的数组被修改了
array([0,1,2,8,4,5,6,7])>>> np.insert(x,1,8)# 在索引为1的位置添加元素8,返回新数组
array([0,8,1,2,8,4,5,6,7])>>> x = np.array([[1,2,3],[4,5,6],[7,8,9]])>>> x[0,2]=4# 修改第0行第2列的元素值>>> x[1:,1:]=1# 切片,把行下标大于等于1,且列下标也大于等于1的元素值都设置1>>> x
array([[1,2,4],[4,1,1],[7,1,1]])>>> x[1:,1:]=[1,2]# 同时修改多个元素值>>> x
array([[1,2,4],[4,1,2],[7,1,2]])>>> x[1:,1:]=[[1,2],[3,4]]# 同时为多个位置元素修改为多个元素值;>>> x
array([[1,2,4],[4,1,2],[7,3,4]])
4. 数组与标量的运算
>>> x = np.array((1,2,3,4,5))# 创建数组对象>>> x
array([1,2,3,4,5])# np数组与数值进行各种运算>>> x *2
array([2,4,6,8,10])>>> x /2
array([0.5,1.,1.5,2.,2.5])>>> x //2
array([0,1,1,2,2], dtype=int32)>>> x **3
array([1,8,27,64,125], dtype=int32)>>> x +2
array([3,4,5,6,7])>>> x %3
array([1,2,0,1,2], dtype=int32)>>>2** x
array([2,4,8,16,32], dtype=int32)>>>2/ x
array([2.,1.,0.66666667,0.5,0.4])>>>63// x
array([63,31,21,15,12], dtype=int32)
5. 数组与数组的运算
>>> np.array([1,2,3,4])+ np.array([4,3,2,1])# 等长数组相加,对应元素相加,返回信数组
array([5,5,5,5])>>> np.array([1,2,3,4])+ np.array([4])# 12.利用广播机制对于np数组中每个元素加上一个相同的值
array([5,6,7,8])>>> a = np.array((1,2,3))>>> a + a # 等长数组之间的加法运算,对应元素相加
array([2,4,6])>>> a * a # 等长数组之间的乘法运算,对应元素相乘
array([1,4,9])>>> a - a # 等长数组之间的减法运算,对应元素相减
array([0,0,0])>>> a / a # 等长数组之间的除法运算,对应元素相除
array([1.,1.,1.])>>> a ** a # 等长数组之间的幂运算,对应元素乘方
array([1,4,27])# 当两个不同维度的np数组相乘或者相加的时候,需要利用广播机制自动补全。>>> a = np.array((1,2,3))>>> b = np.array(([1,2,3],[4,5,6],[7,8,9]))>>> c = a * b
>>> a + b
array([[2,4,6],[5,7,9],[8,10,12]])
6. 数组排序
>>> x = np.array([3,1,2])>>> np.argsort(x)# 返回排序后元素的原下标
array([1,2,0], dtype=int64)>>> x[_]# 使用数组做下标获取元素x[_]在这里_表示最近一次的结果,在这里就是x[np.argsort(x)]。
array([1,2,3])>>> x = np.array([3,1,2,4])>>> x.argmax(), x.argmin()# 最大值和最小值的下标(3,1)>>> np.argsort(x)
array([1,2,0,3], dtype=int64)>>> x[_]
array([1,2,3,4])>>> x.sort()# 原地排序>>> x
array([1,2,3,4])
7. 数组的内积运算
import numpy as np
x = np.array((1,2,3))
y = np.array((4,5,6))# 对两个np数组使用不同方法进行点积运算print(np.dot(x, y))print(x.dot(y))print(sum(x*y))'''
32
32
32
'''
import numpy as np
x = np.arange(0,100,10, dtype=np.floating)print(x)print(np.sin(x))# 一维数组中所有元素求正弦值
x = np.array(([1,2,3],[4,5,6],[7,8,9]))print(x)print(np.cos(x))# 二维数组中所有元素求余弦值print(np.round(np.cos(x)))# 四舍五入print(np.ceil(x/2))# 向上取整'''
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90.]
[ 0. -0.54402111 0.91294525 -0.98803162 0.74511316 -0.26237485
-0.30481062 0.77389068 -0.99388865 0.89399666]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[ 0.54030231 -0.41614684 -0.9899925 ]
[-0.65364362 0.28366219 0.96017029]
[ 0.75390225 -0.14550003 -0.91113026]]
[[ 1. -0. -1.]
[-1. 0. 1.]
[ 1. -0. -1.]]
[[1. 1. 2.]
[2. 3. 3.]
[4. 4. 5.]]
C:\Users\33036\AppData\Local\Temp\ipykernel_26212\580142187.py:3: DeprecationWarning: Converting `np.inexact` or `np.floating` to a dtype is deprecated. The current result is `float64` which is not strictly correct.
x = np.arange(0, 100, 10, dtype=np.floating)
'''
10. 改变数组形状
>>>import numpy as np
>>> x = np.arange(1,11,1)>>> x
array([1,2,3,4,5,6,7,8,9,10])>>> x.shape # 查看数组的形状(10,)>>> x.size # 数组中元素的数量10>>> x.shape =2,5# 改为2行5列>>> x
array([[1,2,3,4,5],[6,7,8,9,10]])>>> x.shape
(2,5)>>> x.shape =5,-1# -1表示自动计算>>> x
array([[1,2],[3,4],[5,6],[7,8],[9,10]])>>> x = x.reshape(2,5)# reshape()方法返回新数组>>> x
array([[1,2,3,4,5],[6,7,8,9,10]])>>> x = np.array(range(5))>>> x.reshape((1,10))# 进行reshape时候,如果元素不够会报错
Traceback (most recent call last):
File "<pyshell#134>", line 1,in<module>
x.reshape((1,10))
ValueError: cannot reshape array of size 5 into shape (1,10)>>> x.resize((1,10))# resize()可以改变数组元素个数>>> x
array([[0,1,2,3,4,0,0,0,0,0]])>>> np.resize(x,(1,3))# 使用numpy的resize()返回新数组
array([[0,1,2]])>>> x # 不对原数组进行任何修改
array([[0,1,2,3,4,0,0,0,0,0]])
11. 数组布尔运算
>>>import numpy as np
>>> x = np.random.rand(10)# 包含10个随机数的数组>>> x
array([0.7903996,0.15615108,0.95351245,0.31781551,0.38210409,0.17162399,0.41261857,0.90624888,0.40526307,0.82711914])>>> x >0.5# 比较数组中每个元素值是否大于0.5
array([True,False,True,False,False,False,False,True,False,True])>>> x[x>0.5]# 返回x中>0.5的元素组成的数组
array([0.7903996,0.95351245,0.90624888,0.82711914])>>> x <0.5# 数组元素每个元素是否小于0.5
array([False,True,False,True,True,True,True,False,True,False])>>>sum((x>0.4)&(x<0.6))# 计算x中>0.4且<0.6的元素数量2>>> np.all(x<1)# 测试是否全部元素都小于1True>>> np.any(x>0.8)# 是否存在大于0.8的元素True>>> a = np.array([1,2,3])>>> b = np.array([3,2,1])>>> a > b # 两个数组中对应位置上的元素比较
array([False,False,True])>>> a[a>b]# 数组a中大于b数组对应位置上元素的值
array([3])>>> a == b
array([False,True,False])>>> a[a==b]
array([2])>>> x = np.arange(1,10)>>> x
array([1,2,3,4,5,6,7,8,9])>>> x[(x%2==0)&(x>5)]# 大于5的偶数,两个数组进行布尔与运算
array([6,8])>>> x[(x%2==0)|(x>5)]# 大于5的元素或者偶数元素,布尔或运算
array([2,4,6,7,8,9])
12. 分段函数
>>>import numpy as np
>>> x = np.random.randint(0,10, size=(1,10))>>> x
array([[9,0,1,3,7,6,6,8,0,7]])>>> np.where(x<5,0,1)# 小于5的元素值对应0,其他对应1
array([[1,0,0,0,1,1,1,1,0,1]])>>> x.resize((2,5))>>> x
array([[9,0,1,3,7],[6,6,8,0,7]])>>> np.piecewise(x,[x<4, x>7],[lambda x:x*2,lambda x:x*3])# 小于4的元素乘以2,大于7的元素乘以3,其他元素变为0
array([[27,0,2,6,0],[0,0,24,0,0]])>>> np.piecewise(x,[x<3,(3<x)&(x<5), x>7],[-1,1,lambda x:x*4])# 将np数组中小于3的用-1代替,(3, 5)之间的用1,大于7的乘以4,其他元素用0替代。
array([[36,-1,-1,0,0],[0,0,32,-1,0]])
Part2. 数据的基本统计描述
1. 利用numpy与鸢尾花数据完成集中趋势指标统计
获取鸢尾花数据第⼀个维度的所有数据,分别组成⼀维行向量和列向量。
import numpy as np
from sklearn.datasets import load_iris
iris_data = load_iris()
data = iris_data.data # 加载数据
data_1 = data[:,0]# 第一维数据
row = data_1.reshape((1,-1))# 一维行向量print(row)
column = data_1.reshape((-1,1))# 一维列向量print(column)