Python学习numpy(一维数组)保姆级别教学

  • Post author:
  • Post category:python


Numpy软件库提供了对于数组进行高速处理的ndarray类。生成ndarray类的方法之一是使用Numpy的np.array()函数,使用np.array(

列表

)语句,通过传入的

列表

创建ndarray实例。同时也可以使用np.arrange()函数

###实例一:创建一维ndarray类
import numpy as np
eg1=np.array([1,2,3]) #输出一维数组[1,2,3]
eg2=np.arange(4)  #输出0到3的一维数组
eg11=[1,2,3]      #创建列表eg11,输出[1,2,3] 
eg22=[0,1,2,3]    #创建列表eg22,输出[0,1,2,3] 
print(eg1,type(eg1)) #[1 2 3] <class 'numpy.ndarray'>
print(eg2,type(eg2)) #[0 1 2 3] <class 'numpy.ndarray'>
print(eg11)   ###输出的是一个列表【1,2,3】
print(type(eg11),type(eg22)) #<class 'list'> <class 'list'>


注意

:虽然上述列子中的eg1与eg11;eg2与eg22输出的元素值是相同的,但他们的type是不同的!当ndarray包含一维数据时称为向量,包含二维数据时称为数组,包含三维及以上的时候称为

张量

array_2d=np.array([[1,2,3,4],[5,6,7,8]]) #创建二维ndarray类(数组)
array_3d=np.array([[[1,2],[3,4]],[[5,6],[7,8]]])  #创建三维ndarray类(张量)
print(array_2d)
print(array_3d)

numpy与列表的另一个区别是:如果要对列表的每一个元素进行计算,需要使用

循环语句

,将其中的元素逐个取出再进行计算,而使用ndarray,就不需要再次使用循环语句了。

####不适用numpy的条件下实现列表每个元素乘以2
a=[1,2,3,4]
# print(a+a) #[1, 2, 3, 4, 1, 2, 3, 4],这样是得不到每个元素都乘以2的效果的
# print(a*2)   #[1, 2, 3, 4, 1, 2, 3, 4],这样也是得不到每个元素都乘以2的效果的
new_a=[]
for i in a:  #遍历列表a
    i*=2  #对每个元素值乘以2
    new_a.append(i)  #将乘以2后的值赋值给新的空列表中
print(new_a)  #[2, 4, 6, 8]
####使用Numpy的条件下实现各种运算!
a1=np.array([1,2,3,4])
b1=np.array([1,3,6,9])
print(a1+a1)  ###输出[2 4 6 8]
print(1/a1)   ###[1.         0.5        0.33333333 0.25      ]对每个元素取倒数

与列表类型相似,numpy也可以使用索引进行引用和切片操作,当我们需要对切片的值进行更改时,可以用arr[start:end]=需要修改的值,

注意:修改的是索引为start到end-1 的列表。

arr=np.arange(10)  #生成一维数组
print(arr)  #[0 1 2 3 4 5 6 7 8 9]
arr[0:3]=1  #改变索引为0到2的元素
print(arr)  #[1 1 1 3 4 5 6 7 8 9]改变索引为0到2的元素值为1


注意

,ndarray与Python的列表一样,如果对

代入其他变量之后的值进行更改,原始的ndarray数组中的值也会改变

,如果要想将ndarray复制成两个独立的变量,就需要使用copy()方法。

arr1=np.array([1,2,3,4,5,6])
print(arr1)
arr2=arr1  #将arr1直接代入arr2变量
arr2[0]=10  #修改arr2第一个元素为10
print(arr1) #[10  2  3  4  5  6],更改了arr2之后,arr1[0]也会受影响
arr11=np.array([1,2,3,4,5,6,7])
arr22=arr11.copy() #使用copy方法,建立一个独立于arr11的数组变量,这样改变arr22不会对arr11产生影响。
arr22[0]=100
print(arr11) #[1 2 3 4 5 6 7],这个时候再更改其他变量的值就不会影响arr11
print(arr22) # [100   2   3   4   5   6   7]  #只会更改arr22的值

在ndarray中可以利用布尔索引,在[]中使用逻辑值(True/False)数组将元素取出的方法,将会创建由逻辑值数组中为True的位置所对应的元素组成的ndarray,并将其返回。

arr_1=np.array([2,3,4,5])
print(arr_1[np.array([True,True,False,True])]) #[2 3 5]
print(arr_1[arr_1%3==1]) #[4],将除以3之后余数为1的元素作为True进行返回,是一种筛选数组元素的一种方法。
  • ndarray中有很多的通用函数可以简化计算,包括

    np.abs()返回元素绝对值,np.exp()[返回元素的幂运算],np.sqrt()[返回元素平方根]

    ,以上的函数只有一个参数
  • 带有两个参数的函数包括

    np.add()[返回元素的和],np.subtract()[返回元素之间的差],np.maximum()[返回元素间最大值的数组]


    -集合函数是指进行数学中的

    集合运算

    的函数,它只支持一维数组的处理、
  • np.unique()函数(将数组元素中重复的元素删除并返回排序后的结果),np.unionld(x,y)函数(取并集并且进行排序),np.intersectld(x,y)(取交集并进行排序)以及np.setdiffld(x,y)(取两个集合的差集并进行排顺序)
a11=np.array([1,2,3,4])
a22=np.array([10,2,3,4])
print(np.add(a11,a22))  #要求传入两个参数,[11  4  6  8]
print(np.add(a11[0],a22[0]))  #11


随机数

:在Numpy数组中可以使用np.random模块生成随机数。

  • np.random.rand():生成大于0小于1且均匀分布的随机数
  • np.random.randint(x,y,z):生成z个大于x小于y的整数,如果指定z=(2,3),那么就会生成2行3列的随机数矩阵
  • np.random.normal():生成服从高斯分布(正态分布)的随机数

    为了方便,可以在代码的前端写上:

    from numpy.random import randint

    这样以后在使用时,只需要打:randint(x,y,z)即可
import numpy as np
from numpy.random import randint
np.random.seed(10)   ####事先生成一个种子,后面产生的随机数在每次运行都不会变,都是固定的
arr1=randint(0,10,(5,2))  ###生成5行2列的整数随机数矩阵,每个元素大于0小于10
print(arr1)
arr2=np.random.rand(3)
print(arr2)



版权声明:本文为ldy__cwx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。