python之numpy一天入门教程

python之numpy入门教程

前言

时间一晃而过,近来只顾玩耍,好久没有更新博客,今天终于想起来要做点事情了,所以今天就写一下numpy的入门教程。小菜也是刚开始学,还望多多指点。

  1. array结构
import numpy as np
A = np.array([1,2,3,4,5])
print(A) #输出 [1 2 3 4 5]

A2 = A + 1
print(A2) #,所有数都会加1,输出 [2 3 4 5 6]

A3 = A*A2
print(A3) #相当于两个数组对应数相乘,也可以理解为线性代数中两个矩阵相乘输出 [2 6 12 20 30]

print(A[0]) #输出第一个数 1

print(A.shape) #输出数组的维度,输出为(5,)

A4 = np.array([[1,2,3],[4,5,6]])
print(A4) #二维数组,输出为[[1 2 3]
                          #[4 5 6]]


A_list = [1,2,3,4,5]
A_array = np.array(A_list)
print(A_array) #输出[1 2 3 4 5]
print(type(A_array)) #A_array的类型,输出是为<class 'numpy.ndarray'>
print(A_array.dtype) #A-array的数据类型,输出为int32
#注 对于ndarry结构来说,里面的所有元素必须是同一类型的,如果不是,会向下自动转换
  1. 数值计算
import numpy as np
A_array = np.array([[1,2,3],[4,5,6]])
print(A_array)  #输出为:[[1 2 3]
                #       [4 5 6]]
print(np.sum(A_array)) #将数组当中的所有数进行累加,输出为21

#指定要进行的操作沿什么轴
print(np.sum(A_array,axis=0)) #沿竖轴进行累加,输出为:[5 7 9]
print(A_array.ndim) #输出数据的维度,ndim返回的是一个数,输出为 2
print(np.sum(A_array,axis=1)) #沿横轴进行累加,输出为[6 15]

print(A_array.prod())  #数组中所有数进行连乘,输出为 120
print(A_array.prod(axis=0)) #沿竖轴进行连乘,输出为:[ 4 10 18]
print(A_array.prod(axis=1)) #沿横轴进行连乘,输出为:[  6 120]

print(A_array.min()) #输出数组中的最小值,输出为:1
print(A_array.min(axis=0)) #沿竖轴依次得到最小值,输出为:[1 2 3]
print(A_array.min(axis=1)) #沿横轴依次得到最小值,输出为:[1 4]
print(A_array.max()) #输出数组中的最大值,输出为:6

#找到索引位置
print(A_array.argmin()) #最小值的索引位置,输出为:0
print(A_array.argmin(axis=0)) #沿竖轴依次得到最小值的索引位置,输出为:[0 0 0]
print(A_array.argmax(axis=1)) #沿横轴依次得到最大值的索引位置,输出为:[2 2]
print(A_array.argmax()) #数组中最大值的索引位置,输出为:5

print(A_array.mean()) #数组的平均值,输出为:3.5
print(A_array.mean(axis=0)) #沿竖轴依次得到的数组的平均值,输出为:[2.5 3.5 4.5]

#标准差 标准差(Standard Deviation) ,是离均差平方的算术平均数的算术平方根,用σ表示。
print(A_array.std()) #输出为:1.707825127659933
print(A_array.std(axis=1)) #对横轴计算标准差,输出为:[0.81649658 0.81649658]

#方差的计算 方差用来计算每一个变量(观察值)与总体均数之间的差异。
print(A_array.var())  #输出为:2.9166666666666665

#clip函数clip这个函数将将数组中的元素限制在a_min, a_max之间,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min。
print(A_array.clip(2,4)) #输出为:[[2 2 3]
                                 # [4 4 4]]
A_array = np.array([1.2,3.56,6.41])
print(A_array.round()) #相当于四舍五入,输出为:[1. 4. 6.]
print(A_array.round(decimals=1)) #保留一位小数点,输出为:[1.2 3.6 6.4]

3.排序

import numpy as np
A_array = np.array([[1.5,1.3,7.5],[5.6,7.8,1.2]])
print(A_array) #输出为:[[1.5 1.3 7.5]
                      # [5.6 7.8 1.2]]
print(np.sort(A_array)) #将数组进行排序,输出为:[[1.3 1.5 7.5]
                                               # [1.2 5.6 7.8]]
print(np.sort(A_array,axis=0))# 对竖轴进行排序,输出为:[[1.5 1.3 1.2]
                                                      # [5.6 7.8 7.5]]

#argsort()函数返回的是数组值从小到大的索引值。
print(np.argsort(A_array)) #输出为:[[1 0 2]
                                    # [2 0 1]]
A_array = np.linspace(0,10,10) #在0-10之家随机产生十个数。
print(A_array)
'''
输出为:[0.          1.11111111 2.22222222 3.33333333  4.44444444  5.55555556
  6.66666667  7.77777778  8.88888889 10.        ]

'''

A_array = np.array([[1,0,6],
                       [1,7,0],
                       [2,3,1],
                       [2,4,0]])
print(A_array)
'''
输出为:
[[1 0 6]
 [1 7 0]
 [2 3 1]
 [2 4 0]]
'''
  1. 数组形状
import numpy as np
A_array = np.arange(10)
print(A_array) #输出为:[0 1 2 3 4 5 6 7 8 9]
print(A_array.shape) #输出数据维度,输出为:(10,)
A_array.shape = 2,5  #重新定义数组维度
print(A_array) #输出为:[[0 1 2 3 4]
                       # [5 6 7 8 9]]
print(A_array.reshape(1,10)) #,更改数据维度,输出为:[[0 1 2 3 4 5 6 7 8 9]]
A_array = np.arange(10)
print(A_array.shape) #输出为:(10,)
A_array = A_array[np.newaxis,:] #np.newaxis 在使用和功能上等价于 None,其实就是 None 的一个别名。
print(A_array) #输出为:[[0 1 2 3 4 5 6 7 8 9]]
A_array = A_array[:,np.newaxis]
print(A_array) #输出为:[[[0 1 2 3 4 5 6 7 8 9]]]

A_array = A_array.squeeze() #squeeze 函数:从数组的形状中删除单维度条目,即把shape中为1的维度去掉
print(A_array.shape) #输出为:(10,)

A_array.shape = 2,5
print(A_array) #输出为:[[0 1 2 3 4]
                       # [5 6 7 8 9]]
print(A_array.T) #转置
'''
输出为:[[0 5]
 [1 6]
 [2 7]
 [3 8]
 [4 9]]'''
 
#数组的连接
a = np.array([[123,456,678],[3214,456,134]])
print(a) #输出为:[[ 123  456  678]
                # [3214  456  134]]
                
b = np.array([[1235,3214,432],[43,13,134]])
print(b) #输出为:[[1235 3214  432]
                # [  43   13  134]]
                
c = np.concatenate((a,b)) #可理解为上下相连
print(c) 
'''
输出为:
[[ 123  456  678]
 [3214  456  134]
 [1235 3214  432]
 [  43   13  134]]
 '''
 
c = np.concatenate((a,b),axis=0) #竖连
print(c) 
'''
输出为:
[[ 123  456  678]
 [3214  456  134]
 [1235 3214  432]
 [  43   13  134]]
'''

c = np.concatenate((a,b),axis=1) #横连
print(c)
'''
输出为:
[[ 123  456  678 1235 3214  432]
 [3214  456  134   43   13  134]]
'''

print(c.shape) #输出为:(2, 6)
print(np.vstack((a,b))) #相等于竖连
'''
输出为:
[[ 123  456  678]
 [3214  456  134]
 [1235 3214  432]
 [  43   13  134]]
'''
print(np.hstack((a,b))) #相当于横连
'''
输出为:
[[ 123  456  678 1235 3214  432]
 [3214  456  134   43   13  134]]
'''
print(a) #输出a数组
'''
输出为:
[[ 123  456  678]
 [3214  456  134]]
'''
print(a.flatten()) #这个相当于压平,压成只有一行
'''
输出为:[ 123  456  678 3214  456  134]
'''

5.数组生成

import numpy as np
print(np.array([1,2,3])) #输出[1 2 3]

#构造出来一个数组
print(np.arange(10)) #输出为:[0 1 2 3 4 5 6 7 8 9]
print(np.arange(2,20,2)) #输出为:[ 2  4  6  8 10 12 14 16 18]
print(np.arange(2,20,2,dtype=np.float32)) #输出为:[ 2.  4.  6.  8. 10. 12. 14. 16. 18.]

#默认是10为底的,开始点和结束点是10的幂
print(np.logspace(0,1,5)) #[ 1.          1.77827941  3.16227766  5.62341325 10.        ]
x = np.linspace(-10,10,5) 
print(x) #输出为:[-10.  -5.   0.   5.  10.]
y = np.linspace(-10,10,5) 
print(y)  #输出为:[-10.  -5.   0.   5.  10.]

#更常用的zeros ones,零矩阵,1矩阵
print(np.zeros(3)) #输出为:[0. 0. 0.]
print(np.zeros((3,3)))
'''
输出为:
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
'''

print(np.ones((3,3)))
'''
输出为:
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
'''
print(np.ones((3,3),dtype=np.float32))
'''
输出为:
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
'''
a = np.empty(6)
print(a.shape) #输出为:(6,)
print(a) 
'''
输出为:[4.45032173e-308 7.56599807e-307 9.34605037e-307 2.33638188e-307
 1.33511562e-306 1.37959129e-306]'''
a.fill(1) #用1填充
print(a) #输出为:[1. 1. 1. 1. 1. 1.]

A_array = np.array([1,2,3,4])
print(A_array) #输出为:[1 2 3 4]
print(np.zeros_like(A_array)) #输出为:[0 0 0 0]
print(np.ones_like(A_array)) #输出为:[1 1 1 1]
print(np.identity(5)) #初等矩阵
'''
输出为:
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]
'''

6.运算

import numpy as np
x = np.array([5,5])
y = np.array([2,2])
z = np.multiply(x,y) #矩阵相乘
print(z) #输出为:[10 10]

#一维的时候是内积运算
print(np.dot(x,y)) #输出为:20
print(x.shape) #输出为:(2,)
print(y.shape) #输出为:(2,)
x.shape = 2,1 #改变维度
print(x) 
'''
输出为:
[[5]
 [5]]
'''
y.shape = 1,2
print(y)  #输出为:[[2 2]]

#二维的时候就是矩阵运算
print(x.shape) #输出为:(2, 1)
print(y.shape) #输出为:(1, 2)
print(np.dot(x,y)) 
'''
输出为:
[[10 10]
 [10 10]]
'''
print(np.dot(y,x)) #输出为:[[20]]
x = np.array([1,1,1])
y = np.array([[1,2,3],[4,5,6]])
print(x*y)
'''
输出为:
[[1 2 3]
 [4 5 6]]
'''

x = np.array([1,1,1,4])
y = np.array([1,1,1,2])
print(x == y) #输出为:[ True  True  True False]
print(np.logical_and(x,y)) #逻辑与:输出为:[ True  True  True  True]
print(np.logical_or(x,y)) #逻辑或,输出为:[ True  True  True  True]
print(np.logical_not(x,y)) #逻辑非,输出为:[0 0 0 0]

7.随机模块

import numpy as np
print(np.random.rand(3,2)) #随机产生三行两列的数组
'''
输出为:
[[0.87465244 0.0233479 ]
 [0.78814546 0.68005351]
 [0.69842302 0.79313718]]
'''
print(np.random.randint(10,size=(5,4))) #生成五行四列的整数数组,且最大值不超过10
'''
输出为:
[[5 4 0 4]
 [8 0 8 4]
 [5 4 8 2]
 [6 4 3 1]
 [0 7 0 0]]
'''
print(np.random.rand()) #随机产生一个数,输出为:0.27569349234690677
print(np.random.random_sample()) #随机产生一个数,输出为:0.5537785049328294
print(np.random.randint(0,10,3)) #随机产生三个数,范围为0-10,输出为:[7 0 7]
mu,sigma = 0,0.1
print(np.random.normal(mu,sigma,10)) #生成高斯分布的概率密度随机数
'''
输出为:
[ 0.01216144 -0.09703099  0.07929835 -0.13699182 -0.06279411  0.00292478
 -0.02031631  0.16823106 -0.05076774 -0.08562122]
'''
np.set_printoptions(precision=2) #设置精度为2
int(np.random.normal(mu,sigma,10))
'''
输出为:
[-0.03 -0.11  0.05 -0.05  0.2  -0.06  0.03  0.08 -0.15  0.02]

'''

8.读写

import numpy as np
f = open('A.txt','w') #打开文件,'w'表示写
f.write('1 2 3 4 5') #写进数字
f.write('\n') #回车换行
f.write('6 7 8 9 10')
f.close()#文件关闭,打开一个文件记得一定要关闭,这样一个文件就写好了

data = []
with open('A.txt') as f:
    for line in f.readlines(): #逐行读文件
        fileds = line.split() #切割符
        cur_data = [float(x) for x in fileds] #将整数转化为浮点数
        data.append(cur_data) #加入到data列表中
data = np.array(data) #转化为数组
print(data)
'''
输出为:
[[ 1.  2.  3.  4.  5.]
 [ 6.  7.  8.  9. 10.]]
'''

data = np.loadtxt('A.txt')#读取数据
print(data)
'''
输出为:
[[ 1.  2.  3.  4.  5.]
 [ 6.  7.  8.  9. 10.]]
'''

data = np.loadtxt('A.txt',delimiter=' ') #指定读取文件中数据的分割符
print(data)
'''
输出为:
[[ 1.  2.  3.  4.  5.]
 [ 6.  7.  8.  9. 10.]]
'''
data = np.loadtxt('A.txt',delimiter=' ',skiprows=1)
print(data)
'''
输出为:
[ 6.  7.  8.  9. 10.]
'''
#skiprows:去掉几行
#delimiter=',':分割符
#usecols=(0,1,4):指定使用那几列

A_array = np.array([[1,2,3],[4,5,6]])
np.savetxt('A2.txt',A_array) #保存数据
np.savetxt('A2.txt',A_array,fmt='%d') #保存数据为整数
np.savetxt('tang2.txt',A_array,fmt='%d',delimiter=',')#分割符为','
np.savetxt('tang2.txt',A_array,fmt='%.2f',delimiter=',')#保留两位小数

#读写array结构
A_array = np.array([[1,2,3],[4,5,6]])
np.save('A_array.npy',tang_array)
 A= np.load('A_array.npy') #获取数据
print(A)#[[1 2 3]
        # [4 5 6]]
A_array2 = np.arange(10)
print(A_array2)#输出为:[0 1 2 3 4 5 6 7 8 9]

np.savez('A.npz',a = A_array,b = A_array2)
data = np.load('A.npz')
print(data['a']) #输出为:[[1 2 3]
                  #        [4 5 6]]
print(data['b']) #输出为:[0 1 2 3 4 5 6 7 8 9]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值