numpy基础

这篇博客介绍了numpy数组的通用函数,包括数组与常数的基本运算、数组的函数以及统计函数。同时,详细阐述了numpy数组的广播机制,讲解了在不同维度数组运算时如何进行元素匹配和复制,帮助读者深入理解这一重要特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

numpy数组通用函数

数组与常熟的基本运算

  • 数组与任意常数的运算都会默认遍历到数组的中每一个元素
  • numpy数组与常数的运算符号本质上就是一系列自定义函数

In [4]:

 

import pylab
x=range(0,4)
y=[i*5 for i in x]#python的经典语法里元素遍历运算必然要使用循环
pylab.plot(x,y,"-o")
pylab.show()

In [3]:

 

import numpy as np
x1=np.arange(0,4)
y1=x1*5#在numpy的数组里循环遍历的运算已经内在的包含在运算符号中了
pylab.plot(x1,y1,"-o")
pylab.show()

In [5]:

 

x = [0,1,2,3]
x1 = np.arange(0,4)
print(x,x1)
print(x*3)
print(x1*3)
print(np.multiply(x1,3))
[0, 1, 2, 3] [0 1 2 3]
[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
[0 3 6 9]
[0 3 6 9]

In [6]:

 

x1=np.arange(0,4)
print(x1-2,np.subtract(x1,2))#减
print(x1+2,np.add(x1,2))#加
print(x1/2,np.divide(x1,2))#注意这里不取整
print(x1%2,np.mod(x1,2))#求余数
print(x1**2,np.power(x1,2))#乘方
print(x1//2,np.floor_divide(x1,2))#地板除
[-2 -1  0  1] [-2 -1  0  1]
[2 3 4 5] [2 3 4 5]
[0.  0.5 1.  1.5] [0.  0.5 1.  1.5]
[0 1 0 1] [0 1 0 1]
[0 1 4 9] [0 1 4 9]
[0 0 1 1] [0 0 1 1]

数组的函数

In [7]:

 

x=np.array([-1,2,-4,1])
print(np.absolute(x),np.sin(x),np.cos(x),np.tan(x),np.exp(x))#绝对值,正弦,余弦,正切,e的x次方
[1 2 4 1] [-0.84147098  0.90929743  0.7568025   0.84147098] [ 0.54030231 -0.41614684 -0.65364362  0.54030231] [-1.55740772 -2.18503986 -1.15782128  1.55740772] [0.36787944 7.3890561  0.01831564 2.71828183]

In [8]:

 

x=np.array([3,2,5,7,8])
print(np.log(x),np.log10(x),np.power(2,x))#e为底,10位底对数;x元素为幂指数,对元素有要求
[1.09861229 0.69314718 1.60943791 1.94591015 2.07944154] [0.47712125 0.30103    0.69897    0.84509804 0.90308999] [  8   4  32 128 256]

统计函数

*numpy能完成一些统计功能,不过鉴于pandas的统计功能更加完善,因此这里简单介绍

In [10]:

 

x=np.array([2,1,5,4,8])
print(np.sum(x),np.min(x),np.max(x),np.mean(x))
20 1 8 4.0

In [11]:

 

print(np.prod(x))#求累乘
print(np.std(x))#标准差
print(np.var(x))#方差
print(np.argmin(x),np.argmax(x))#最小值最大值的位置
print(np.percentile(x,50))#分位数
320
2.449489742783178
6.0
1 4
4.0

In [12]:

 

x=np.array([[2,1,5,4,8],
            [0,3,5,7,2]])
print(np.shape(x))
(2, 5)

In [14]:

 

print(np.sum(x),np.sum(x,axis=0))
37 [ 2  4 10 11 10]

In [15]:

 

print(np.std(x),np.std(x,axis=1))
2.4515301344262523 [2.44948974 2.41660919]

numpy数组的广播机制

数组与同维度数组的基本运算

  • numpy数组之间的运算和线性代数中的矩阵运算不一样
  • 同维度和形状的数组之间就是同位置的元素两两匹配运算的过程

In [17]:

 

import numpy as np
a=np.array([[ 1.,  2.,  1.],
            [ 1.,  2.,  1.]])
b=np.array([[ 1.,  2.,  3.],
            [ 1.,  2.,  3.]])
print(a.shape,b.shape)
(2, 3) (2, 3)

In [18]:

 

a+b

Out[18]:

array([[2., 4., 4.],
       [2., 4., 4.]])

In [19]:

 

a*b

Out[19]:

array([[1., 4., 3.],
       [1., 4., 3.]])

In [20]:

 

a-b

Out[20]:

array([[ 0.,  0., -2.],
       [ 0.,  0., -2.]])

当两个数组维度不一致的时候

  • 少的数组在某一个轴(或是多个轴)的方向缺失数据,缺数据的那个方向只能有1个元素(或是一行,一面)作为复制蓝本, 然后依照轴的方向复制,复制数由多的那个数组的大小决定

In [21]:

 

a=np.array([[ 1.,  2.,  1.],
            [ 1.,  2.,  1.]])

In [22]:

 

#数组与常数的相加可以看成把常数按照数组的形状进行复制然后在相加的过程
print(a+5)
print(a+np.array([[ 5.,  5.,  5.],
                  [ 5.,  5.,  5.]]))
[[6. 7. 6.]
 [6. 7. 6.]]
[[6. 7. 6.]
 [6. 7. 6.]]

In [23]:

 

a=np.array([[ 1.,  2.,  1.],
            [ 1.,  2.,  1.],
            [ 1.,  2.,  1.]])
b=np.array([[ 3.,  2.,  1.]])
print(a+b)
[[4. 4. 2.]
 [4. 4. 2.]
 [4. 4. 2.]]

In [24]:

 

a=np.array([[ 1.,  2.,  1.],
            [ 1.,  2.,  1.],
            [ 1.,  2.,  1.]])
b=np.array([[3.], 
            [2.], 
            [1.]])
print(a+b)
[[4. 5. 4.]
 [3. 4. 3.]
 [2. 3. 2.]]

两个数组都需要复制的情况

In [26]:

 

a=np.array([[ 1.,  2.,  1.]])
b=np.array([[ 1.],
            [ 2.],
            [ 1.],
            [ 4.]])
a+b

Out[26]:

array([[2., 3., 2.],
       [3., 4., 3.],
       [2., 3., 2.],
       [5., 6., 5.]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值