python中的numpy

提示:

        这是作者根据《Python机器学习入门与实战》------人民邮电出版社 所写的一个个人笔记。笔记中借鉴了原书的代码,并且加上了作者自己的理解

  1. 首先介绍最基本的有关于numpy数组的使用方法.

NumPy的数组对象是ndarray。ndarray是一种快速且灵活的大数据 集容器,可用于存放同类型元素的多维数组。这里特别强调是同类型 的元素,对象中的每个元素在内存中都有相同大小的存储区域。 创建一个 ndarray 只需调用 NumPy 的array()方法,具体形式如 下。

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndim = 0) array()

方法中的object参数指的就是数组或嵌套的数列,如列表 等;dtype参数指的是数组元素的数据类型,这个参数是可选的;copy 参数指的是对象是否需要复制,它也是可选的参数;order参数解释为 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认); subok参数指默认返回一个与基类类型一致的数组;ndim参数指的是指 定生成数组的最小维度

import numpy as np 
# 基本索引
names=np.array(["业务员","业务员","经理","主管","业务员","主管"]) 
salary=np.array([2520.00,3600.00,2745.00,4200.00,3805.00,3947.00]) 
print(salary[names=="业务员"]) #这里直接输出了一个类似于索引的东西
names=np.array(["业务员","业务员","经理","主管","业务员","主管"]) 
salary=np.array([2520.00,3600.00,2745.00,4200.00,3805.00,3947.00]) 
print(salary[(names=="经理") |(names=="主管")]) #这里不可以换成 and or
print("-------------------") 
print(salary[(names=="主管") &(salary>4000)])

# 矩阵的转制
arr=np.array([[1,1,1,1,1],[2,2,2,2,2],[3,3,3,3,3],[4,4,4,4,4],
 [5,5,5,5,5]]) 
arr_trans=arr.transpose()  #如果这里使用arr.T 会得到一样的结果
print(arr_trans)
# 一些特殊的矩阵
arr1=np.zeros((3,4)) #3*4 的全零矩阵
print(arr1)
arr1=np.ones((3,4)) #全为一的矩阵
print(arr1)
arr1=np.eye(4)      #单位矩阵
print(arr1)
arr1=np.identity(3) #单位矩阵
print(arr1)
  1. 矢量化部分

数组对机器学习来说,最重要的作用在于不用编写循环即可对数 据进行批量运算。这通常就叫作矢量化(vectorization)。大小相等 的数组之间的任何算术运算都会被应用到元素级。也就是可以通过arr+8,arr*1 对arr中的每一个元素进行批量处理

import numpy as np 
arr1=np.array([
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12]
    ])
arr2=arr1*2
print(arr2)
import numpy as np 
arr=np.random.randint(16) #生成一个0,15的整数
arr2=np.arange(16).reshape(2,2,4)#生成一个0到15的一维数组然后 转化


print(arr2)
  1. 矩阵部分
# 矩阵的转制
arr=np.array([[1,1,1,1,1],[2,2,2,2,2],[3,3,3,3,3],[4,4,4,4,4],
 [5,5,5,5,5]]) 
arr_trans=arr.transpose()
print(arr_trans)
arr_trans_2=arr.T()
print(arr_trans)

从运行结果上看,T属性和transpose()方法得到的结果是一样 的。无论是T属性,还是transpose()方法,在后面的机器学习介绍 中,都常常被用来计算 y = ax1+ bx2+ cx3+ dx4这种形式的式子。其实可以 把一个一维数组转置后点乘另外一个一维数组来获取结果,记作 a.dot(b)。在NumPy中,dot用作数组之间的点乘运算。点乘运算以数学运算中矩阵相乘的方式实现,C 中第 i 行第 j 列所在元素等于A 中第 i 行所有元素跟B 中第 j 列所有元素一一对应的乘积之和

对三维数组来说,它有3个维度;相当于有 x 轴、 y 轴、 z 轴; x 轴用 0表示, y 轴用1表示, z 轴用2来表示。3个轴之间的相互交换可以这样 描述, x 轴和 y 轴的交换可以看作0和1的交换, x 轴和 z 轴的交换可以看 作0和2的交换, y 轴和 z 轴的交换可以看作1和2的交换。 根据对交换的分析可知,transpose(1,0,2)表示 x 轴与 y 轴发生交 换 x-->y,y-->x,z-->z

4.运算函数表

import numpy as np 

arr1=np.array([
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12],
    [13,14,15,16]
])
# 求和部分  sum
arr_sum=arr1.sum()            #对所有的数据进行求和
arr_sum_0=arr1[0].sum()       #对0列数据进行求和
arr_sum_list=arr1.sum(1)      #将每一组的元素求和再分组输出
print("arr_sum \tis \t",arr_sum)
print("arr_sum_0 \tis \t",arr_sum_0)
print(arr_sum_list)

# 算数平均值 mean
arr_mean=arr1.mean(0)         #对所有的数据进行求平均值
arr_mean_list=arr1.mean(1)       #对每一组的数据求平均值
print(arr_mean)
print(arr_mean_list)

#std var 同理 它们用来求标准差和方差
  1. 三元运算 where
import numpy as np 

arr1=np.array([
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12],
    [13,14,15,16]
])
# 三元表达式  这里的where可以理解为  if bool result= a else rusult= b
red_arr1=np.array([20,30,40,50,60,70,80,90]) 
red_arr2=np.array([0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]) 
bool_arr=np.array([True,False,True,False,True,False,False,True]) 
red_result=np.where(bool_arr,red_arr1,red_arr2) 
print(red_result) #这里的 where 也可以拿去套娃
  1. 数组之间的运算 concatenate split inld
import numpy as np 

arr1=np.array([
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12],
    [13,14,15,16]
])
#数组之间的运算 

#concatenate
man=np.array([[20,21,23],[25,26,27]]) 
woman=np.array([[23,22,20],[27,28,26]]) 
all=np.concatenate([man,woman],axis=0) #剥离最外层[] 放进去
cope=np.concatenate([man,woman],axis=1) #剥离两层[][]放进去然后再加上[][]
#两种的区别在于插入的位置不同
print(all) 
print("------------------") 
print(cope)

#split
cope=np.array([20,21,23,23,22,20,25,26,27,27,28,26]) 
split_cope=np.split(cope,[1,3,6,7]) #以索引1,3,6,7进行划分
print(split_cope)
  1. 数组之间的集合运算 sort unique
import numpy as np 

arr1=np.array([
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12],
    [13,14,15,16]
])
arr2=np.array([
    [5,7,11,15],
    [16,15,23,17],
    [23,35,12,14],
    [34,22,15,41]
])
#数组之间的集合运算运算 
print(arr2)
print("--------------")
print("集合")
unique_arr2=np.unique(arr2)
print(unique_arr2)  #这个就和set 集合一个性质
arr2.sort()
print("排序")
print(arr2)
print("--------------")

#inld 用于检查 arr1中的元素是否在arr2中,返回bool数组
names=np.array(["经理","副经理","主管","主管","主管","技术员","业务员"]) 
my_names=np.array(["主管","技术员"]) 
uni_names=np.in1d(names,my_names) 
print(uni_names)
#Intersectld(x,y) 取交集 Unionld(x,y) 取并集 setdiffld(x,y) 取差集

  1. 数组的保存和载入 save load savez

save()和load()是读写磁盘数组数据的两个主要函数。默认情况 下,数组以未压缩的原始二进制形式保存在扩展名为“.npy”的文件 中

import numpy as np 

arr1=np.array([
    [1,2,3,4],
    [5,6,7,8],
    [9,10,11,12],
    [13,14,15,16]
])
arr2=np.array([
    [5,7,11,15],
    [16,15,23,17],
    [23,35,12,14],
    [34,22,15,41]
])
# 文件保存到arr
np.save("arr1_file.npy",arr1)
np.save("arr2_file.npy",arr2)

# 载入文件
arr3=np.load("arr1_file.npy")+np.load("arr2_file.npy")
print(arr3)

通过savez()可以将多个数组保存到一个压缩文件中,将数组以关 键字参数的形式传入即可。 这里就不详细说了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值