Python:Numpy学习(一)常用函数(小白)

  • Post author:
  • Post category:python



目录


前言:


安装numpy包:


numpy中创建数组的函数:


np.array():


np.arange():


np.linspace():


调用numpy中的其他常用函数:


reshape():


ndim():


np.append():


前言:

本文包含numpy基本知识,了解包内一些简单函数,如:numpy.array()函数;numpy.arange()函数; lnumpy.inspace()函数;reshape()函数;ndim()函数;numpy.append()函数。

安装numpy包:

1. 有大佬的安装教程如下:




Numpy安装教程_numpy怎么安装_快去学模电!的博客-CSDN博客



https://blog.csdn.net/weixin_42216236/article/details/120639540?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167835097116800227422068%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167835097116800227422068&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-120639540-null-null.142%5Ev73%5Epc_search_v2,201%5Ev4%5Eadd_ask,239%5Ev2%5Einsert_chatgpt&utm_term=%E5%AE%89%E8%A3%85numpy&spm=1018.2226.3001.4187



2. 个人更喜欢使用python内部自带的解释器下载,无需使用cmd,更新pip后可以直接安装numpy

(如果创建了多个python项目,就需要多次下载numpy,一个项目带一个numpy;

解释器不是插件。)

这个方法较为简单,在文件——>设置——>项目,找到python解释器。

(另:如果想要引入pandas包,项目解释器中必须有numpy,否则尝试任何方法都无法安装。(本人亲测,如果哪位大佬走过路过看了本文,并在没有numpy解释器的情况下引入了pandas包,请不吝赐教。)个人认为,这是由于pandas基于numpy。)

numpy中创建数组的函数:

np.array():

import numpy as np

c = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [3, 5, 6, 0],
              [8, 9, 5, 6]])

我们使用

np.array()

函数创建了一个二维数组。由于这个函数是numpy的,所以在调用的时候要写:np.array()。

测试该函数的数据类型,使用type()函数:

print(type(c))
# <class 'numpy.ndarray'>

于是我们调用成功,得到了一个

numpy.ndarray

类型


的数组。

注意:ndarray是数据类型,不是函数!!!

我们还可以再举一个例子,比较两者的区别。创建一个没有调用np.array()函数的二维数组,并输出其数据类型:

ccc = [[1, 2, 3, 4], [5, 6, 7, 8], [3, 5, 6, 0], [8, 9, 5, 6]]
print(type(ccc))
# <class 'list'>

输出的结果为列表。

问:为什么我要费劲的去调用numpy的函数,创建一个看起来没什么区别的ndarray类型数组,而不能直接用数组呢?

我最初也有这个问题,在逐渐学习中,我领略了numpy的强大。

np.array()中还有一个参数可以调用——dtype=; 即可以改变输入数组的数据类型。比如,输入的数组(此时类型还是List)里面装的是int,可以用dtype转为str。

但是注意!

即便数组内部的int转化为了str,其数据类型依然是numpy.ndarray

a = np.array([1], dtype=str)
print(a)
# 输出 ['1']
print(type(a))
# 输出  <class 'numpy.ndarray'>

np.arange():

如果说np.array()是将输入的数组转化为np.ndarray类型,那么np.arange()则是简便快捷创建


一维


数组的不二选择。

该函数内部有三个参数:start, end, step,表示的是从start开始,到end结束(结果


不包含


end),每间隔step,输出一个数字。

a = np.arange(0, 60, 5)
print(a)
# 输出: [ 0  5 10 15 20 25 30 35 40 45 50 55]

其数据类型依然是np.ndarray。

如果我在参数内只输入一个数,依然是可行的。默认start为0,step为1。(和range()函数有相似之处)

pr = np.arange(10)
print("pr.arange(10):", pr)
# pr.arange(10): [0 1 2 3 4 5 6 7 8 9]



注意


:np.arange()中的参数,要么只写一个end,要么三个数全写,不可以只写end和step,而不写start,否则会赋值空数组。


np.linspace():

该函数的主要参数也有3个,分别是:start, end, step,该函数是从start开始,到end结束(


包含


end!),一共输出


step个


数字,返回一个np.ndarray类型的数组。(比如下面的例子,step=8,表示一共有8个数字,千万别和切片里面用到的step弄混了)

不过,np.linspace()除了这三个重要参数外,还有两个隐藏参数(我起的名,专指呢些可写可不写的参数):endpoint 和 retstep,

不写

这两个参数的时候,

endpoint=True,retstep=False

先说endpoint:

endpoint


默认


为True,表示

包尾

。如果不想包尾怎么办?endpoint=False就不包了。

s1 = np.linspace(10, 50, 8, endpoint=False)
print(s1)
#   [10. 15. 20. 25. 30. 35. 40. 45.]


s2 = np.linspace(10, 50, 8, endpoint=True)
print(s2)
#   [10.         15.71428571 21.42857143 27.14285714 32.85714286 38.57142857
 44.28571429 50.        ]

retstep:

restep默认等于False,该参数为True时,显示np.ndarray数组的公差。


调用numpy中的其他常用函数:

reshape():

该函数基于np.ndarray数组进行修改,函数内部参数为目标数组的










a = np.arange(0, 60, 5)
a1 = a.reshape(4, 3)
# 将a转化为4行3列的二维数组

reshape属于numpy的函数,但调用的前面需要写a,而不是np。

所以,也可以有以下的简便写法:

a = np.arange(0, 60, 5).reshape(4, 3)

ndim():

该函数主要是用来查看np.ndarray数组的维数,比较简单,基于数组,所以调用方法和reshape()相同。

c = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [3, 5, 6, 0],
              [8, 9, 5, 6]])
print("c.ndim=", c.ndim)
# c.ndim= 2

np.append():

这个函数名称真的很眼熟,作用也和列表中的append()相似,但依然有不同。


1. 创建一个二维数组,使用np.append(),以一维列表作为参数传入函数中。

a = np.arange(0, 60, 5).reshape(4, 3)
"""这是我们之前创造的数组, 输出结果如下"""
# [[ 0  5 10]
# [15 20 25]
# [30 35 40]
# [45 50 55]]

aa = np.append(a, [11, 22, 33])
print(aa)
# [ 0  5 10 15 20 25 30 35 40 45 50 55 11 22 33]

问题:输出结果由一个二维数组,转化成了一维数组。即便是将添加的一维数组转化为二维数组,输出的依然是一维数组。此时可以随意添加,无需在意原数组的列数。


2. 依然使用原二维数组,在np.append() 函数中加入参数 axis=0

bb = np.append(a, [[11, 22, 33]], axis=0)
print(bb)
# 应该注意到,添加的数组变成了二维数组,附在ndarray后面

添加的数组作为新的一行附着在数组最后。

原数组为4行3列,即一行有3个数字,如果当axis=0时,其列数必须和原数组相同。如果随意修改,就会报错。

因此,axis=0时,相当于固定列数,添加行数。

3.

依然使用原二维数组,在np.append() 函数中加入参数 axis=1

cc = np.append(a, [[11, 22, 33], [44, 55, 66], [45, 56, 67], [33, 44, 88]], axis=1)
print(cc)
# [[ 0  5 10 11 22 33]
# [15 20 25 44 55 66]
# [30 35 40 45 56 67]
# [45 50 55 33 44 88]]

不难看出,添加的数组被依次附着在每一行的后面,如果添加的数组行数大于原数组的行数,就会报错。

因此,axis=0时,相当于固定行数,添加列数。


日拱一卒,功不唐捐。



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