科学计算Python库:Numpy入门

目录

前言

NumPy 是 Python 中科学计算的基础包。它是一个 Python 库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种例程,包括数学、逻辑、形状操作、排序、选择、I/O 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。科学计算离不开numpy,学习数据分析必先学numpy!!!
本文由浅入深,对numpy进行入门介绍。讲解了创建数组、索引数组、运算等使用。

放一个官方文档:Numpy官方文档

安装

pip install numpy

导入

import numpy as np

创建numpy数组

numpy数组叫 ndarray
创建数组总结为四类

1、转换 (Python列表和元组)

a = np.array([2, 3, 4])

2、 NumPy 内置创建函数

( arange、zeros、ones 、random、linspace、eye)

arange

a = np.arange(6)
print(a)

b = np.arange(12).reshape(4, 3)
print(b)
'''
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
 '''

c = np.arange(24).reshape(2, 3, 4)
print(c)
'''
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
  '''

zeros

np.zeros((3, 4))
'''
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
       '''

ones

np.ones((2, 3, 4), dtype=np.int16)
'''
array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]], dtype=int16)
        '''

random

random创建数组:

关于numpy的random使用请看我的另一篇文章Numpy教程:Numpy.random使用(新)


np.random.random((3,2))

np.random.permutation(data)

linspace


numpy.linspace(start=, stop=, num=50, axis=0)

np.linspace(2.0, 3.0, num=5)

eye

eye可以创建E
numpy.eye(N, M=None, k=0, dtype=

np.eye(2, dtype=int)
array([[1, 0],
       [0, 1]])

3、原有数组操作


ndarray.reshape()

4、外部数据读取

numpy.read_csv()
numpy.load()

常用函数


ndarray.ndim

ndarray.shape

ndarray.size

ndarray.dtype

ndarray.itemsize

ndarray.reshape()

常用常量


numpy.inf

numpy.NINF

numpy.e

numpy.pi

numpy.nan

数组维度(形状)编辑

1、数组重塑


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

a.resize((2,3))

小技巧:如果想自动推导shape形状,可以使用-1值占个位,计算机会自动处理
a = np.arange(30)
b =a.reshape((2, -1, 3)) # -1 means “whatever is needed”
b.shape # (2, 5,3)

2、添加轴


a = np.array([1, 2, 3, 4, 5, 6])
b = np.expand_dims(a, axis=1)
print(b.shape)

3、多维转一维

ndarray.ravel()
ndarray.flatten()

4、矩阵转置

ndarray.transpose()
ndarray.T

索引/切片

1、基本索引

ndarray可以像python列表一样被索引


s=np.array([1,2,3,4,5])
print(s)

print(s[2])

print(s[:2])


s=np.array([1,2,3,4]).reshape((2,2))
print(s)
'''
array([[1, 2],
       [3, 4]])
       '''
print(s[1,0])

注意1:对多维数组使用”方括号加逗号”的索引只能用于numpy数组, 对python列表只能使用”多个方括号”分步索引
注意2:使用切片时( : ),要注意以下情况

>>> a=np.arange(4).reshape(2,2)
>>> a
array([[0, 1],
       [2, 3]])
>>> a[0:2,0]
array([0, 2])
>>> a[0:2][0]
array([0, 1])

2、高级索引

想用数组索引,数组必须是一维的,这是前提

整数数组索引

y = np.arange(35).reshape(5, 7)
y

'''
array([[ 0,  1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12, 13],
       [14, 15, 16, 17, 18, 19, 20],
       [21, 22, 23, 24, 25, 26, 27],
       [28, 29, 30, 31, 32, 33, 34]])'''
y[np.array([0, 2, 4]), np.array([0, 1, 2])]

布尔数组索引

x = np.array([[0, 1], [1, 1], [2, 2]])
rowsum = x.sum(-1)
x[rowsum  2, :]

'''
array([[0, 1],
       [1, 1]])
       '''

筛选

1、逻辑筛选

2、where筛选

numpy.where(condition, [x, y, ])

>>> a=np.arange(4)
>>> np.where(a<2)
(array([0, 1], dtype=int64),)

>>> a=np.arange(4)
>>> np.where(a<2,a,a*2)
array([0, 1, 4, 6])

3、去除重复值

>>> a=np.array([1,4,1,5,6,7,4])
>>> np.unique(a)
array([1, 4, 5, 6, 7])

>>> unique_values, occurrence_count = np.unique(a, return_counts=True)
>>> unique_values
array([1, 4, 5, 6, 7])
>>> occurrence_count
array([2, 2, 1, 1, 1], dtype=int64)

排序

反转顺序

np.flip()


arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
np.flip(arr)

arr_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
np.flip(arr_2d)

    '''[[12 11 10  9]
     [ 8  7  6  5]
     [ 4  3  2  1]]'''
np.flip(arr_2d, axis=0)

    '''[[ 9 10 11 12]
     [ 5  6  7  8]
     [ 1  2  3  4]]'''

迭代


>>> a=np.arange(4).reshape((2,2))
>>> for i in a:
...  print(i)
...

[0 1]
[2 3]

如果想遍历所有元素,可以把多维数组平铺成一维数组遍历

>>> a=np.arange(4).reshape((2,2))
>>> for i in a.flat:
...  print(i)
...

0
1
2
3

运算

1、基础运算

数组的运算可以是形状相同的运算,也可以是多维数组与一维数组运算。

+

-

元素相乘


*

矩阵相乘

@

.dot()

科学计算Python库:Numpy入门

广播规则
对不同大小的矩阵进行这些算术运算,但前提是得有一个轴的形状是一样的。在这种情况下,NumPy 将使用其广播规则进行操作。其实就是把少的形状的数组复制成多的形状的数组,再运算。


>>> data = np.array([[1, 2], [3, 4], [5, 6]])
>>> ones_row = np.array([[1, 1]])
>>> data + ones_row
array([[2, 3],
       [4, 5],
       [6, 7]])

2、高级运算

对于多维数组,基础运算已经不能满足使用,以下介绍的都是可以添加参数axis的函数方法。


ndarray.sum()

ndarray.min()

ndarray.max()

ndarray.cumsum()

&#x6CE8;&#x610F;&#xFF1A;如果不加axis参数,函数会把多维数组全部拆成一维的,再计算。加上axis参数并赋值,会返回指定轴方向的数组。

3、数学处理函数


numpy.exp(array_like)

numpy.sqrt(array_like)

numpy.floor(array_like)

numpy.around(array_like, decimals=0, out=None)

numpy.ceil(array_like)

numpy.transpose(a, axes=None)[source]

组合连接


np.vstack((na1,na2))

np.hstack((na1,na2))

np.stack((na1,na2))

拆分


numpy.split(ary, indices_or_sections, axis=0)

解释: indices_or_sections可以为整数也可以是一维数组
是整数时,数字是数组划分的数量
是一维数组时,一维数组代表的是划分数组的位置

数组并集、交集、差集

&#x6CE8;&#x610F;&#xFF1A;以下讲的都是针对 一维数组操作的。

如果有两个一维数组,想取出这两个数组都有的数,那么可以使用数据交集函数: np.intersect1d(array1,array2)
如果想返回这两个多有的值,但是重复的不要再加一遍了,可以使用数组并集操作: np.union1d(array1,array2)
如果想返回一个数组中另一个数组没有的,可以使用差集操作: np.setdiff1d(array1,array2)

科学计算Python库:Numpy入门
import numpy as np

union=np.union1d(array1,array2)

inter=np.intersect1d(array1,array2)

diff=np.setdiff1d(array1,array2)
diff=np.setdiff1d(array2,array1)

Axis轴的个人理解

网上有人把axis=0理解为行,axis=1理解为列;这个只能用于理解二维数组,但是科学计算中,需要处理三维甚至多维的数组,”行列解释”无能为力。下面我将从”方括号解释”来解释一下axis的意思,这可以适用于多维数组。

轴(axis)其实可以理解为方括号”[]”,有几个方括号就有几个轴,数轴的顺序是从外往里数的,最外面的方括号是第一个轴(axis=0),次外面的是第二个轴(axis=1)。比如说下面的就是两个轴:

科学计算Python库:Numpy入门
传入的shape为 (3,2);意思是第一个轴就是3个,第二个轴就是2个。用”方括号解释”就是第一个括号里的元素有三个,先不管这个元素是什么玩意、多少东西,反正第一个括号就三个元素;然后看第二个参数是2,就是说刚才那个元素有个括号,里面有2个元素,因为没有指定dtype,默认是float64浮点值。

Original: https://blog.csdn.net/Crayonxin2000/article/details/122848946
Author: Crayon鑫
Title: 科学计算Python库:Numpy入门

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/761236/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 跟羽夏学 Ghidra ——初识

    写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图。 本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正。 如有好的建议,欢迎反馈。码字…

    Python 2023年10月22日
    041
  • 制作自已的屏保动态

    制作自已的屏保动态 我的环境 第一步:编写自己的屏保程序 * 1、代码准备 2、编译 第二步:有了可运行程序,使用RAR压缩工具将资源和程序打包成独立可执行exe 第三步:将dis…

    Python 2023年9月20日
    029
  • Python代理IP异常:requests.exceptions.ProxyError: HTTPSConnectionPool(host=‘xxxx‘, port=443)

    背景 这是我在使用Python爬取网页信息的时候出现的异常。 由于很多要爬取的网站会把”IP限制”作为反爬虫手段,所以我偶尔会使用”代理IP服务…

    Python 2023年10月8日
    054
  • 密码学奇妙之旅、02 混合加密系统、AES、RSA标准、Golang代码

    CTR 计数器模式 计数器模式CTR是分组密码模式中的一种。通过将逐次累加的计数器进行加密来生成密钥流的流密码。每次加密时会生成一个不同的值来作为计数器的初始值。 可以事先进行加密…

    Python 2023年10月20日
    041
  • 遗传算法(Python)

    一、遗传算法 1、遗传算法的定义 遗传算法是一种现代优化算法。根据自然界适者生存的法则,种群中优秀个体的基因进行遗传。每个个体的染色体通过选择、交叉和变异等过程产生新的适应度更大的…

    Python 2023年8月1日
    069
  • Django日志功能

    在setting.py下: 1 python 2 BK_LOG_DIR = os.environ.get(‘BK_LOG_DIR’, ‘/data/paas/apps/logs/’…

    Python 2023年6月6日
    064
  • pandas高频用法大全

    0 前言 pandas作为python中数据处理分析经常使用的一个库,深受大众喜欢,实际中也非常常用,下面我们就针对pandas中的一些高频使用方式进行总结。 1.创建datafr…

    Python 2023年8月17日
    045
  • 安卓必装软件

    Island – 「绿色守护」作者新作,将不老实的应用 隔离 + 冻结 + 双开 [Android] Island 是一款完全针对国产流氓应用而生的守护应用,基于系统原生功能 An…

    Python 2023年6月11日
    091
  • java实现模拟调用接口

    本文总结如何用fiddler和postman调试接口,并用java模拟调用接口。 当页面点击事件后,在fiddler出现一个请求,单击左侧请求,在右侧的raw的tab标签,出现该请…

    Python 2023年11月6日
    035
  • 使用Aggregated API扩展你的kubernetes API

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Python 2023年6月3日
    092
  • 【scrapy爬虫】爬取华为应用市场中所有应用的评论数据

    前言 项目需要爬取评论数据,在此做一个记录,这里爬取的是web端的数据,以后可能会考虑爬取android app中的数据。 一、安装并创建Scrapy项目 Scrapy官方文档:h…

    Python 2023年10月2日
    049
  • Android GB∕T 19056-2021 汽车行驶记录仪-定位性能测试

    最近在做汽车相关的项目,然后要根据最新发布的新国标接入,我们这边之前没有做过的,我是第一个,好惨啊。远程调试不通,后来还专门到现场进行了测试,来到刚刚转正没几天就开始出差了,命太苦…

    Python 2023年10月9日
    039
  • python之mysql查询

    &#x6570;&#x636E;&#x5E93;&#x5730;&#x5740;=’localhost’ &#x6570;&…

    Python 2023年8月2日
    054
  • pandas学习笔记之DateFrame

    pandas学习笔记之DateFrame 文章目录 pandas学习笔记之DateFrame * – 1.DateFrame的创建 + 1)认识DataFrame对象 …

    Python 2023年8月7日
    051
  • 跟我学Python图像处理丨图像分类原理与案例

    摘要:本篇文章将分享图像分类原理,并介绍基于KNN、朴素贝叶斯算法的图像分类案例。 本文分享自华为云社区《[Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法…

    Python 2023年9月26日
    046
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球