百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

NumPy 入门+使用速查

ztj100 2025-02-10 15:16 9 浏览 0 评论

一、Numpy简介

NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。

NumPy包的核心是 ndarray 对象。它封装了python原生的同数据类型的 n 维数组,为了保证其性能优良,其中有许多操作都是代码在本地进行编译后执行的。

numpy数组创建时是固定大小,python数组(list)是动态的。更改ndarray的大小将创建一个新数组并删除原来的数组。

1. NumPy数组与Phthon List类型区别。

  • NumPy数组中的元素都需要具有相同的数据类型,因此在内存中的大小相同。
  • python的List可以存放不同类型的元素。

  例外情况:Python的原生数组里包含了NumPy的对象的时候,这种情况下就允许不同大小元素的数组。

  • 数学操作执行效率高于原生python
  • 越来越多的基于Python的科学和数学软件包使用NumPy数组。

2. 安装

pip install numpy

二、ndarray基本知识

NumPy的主要对象是同构多维数组(homogeneous multidimensional array)。它是一个元素表(通常是数字),所有类型都相同,由非负整数元组索引。在NumPy维度中称为 轴(axes)。

例如,3D空间中的点的坐标[1, 2, 1]具有一个轴。该轴有3个元素,所以我们说它的长度为3.在下图所示的例子中,数组有2个轴。第一轴的长度为2,第二轴的长度为3。

[[ 1., 0., 0.],
 [ 0., 1., 2.]]

NumPy的数组类称为ndarray,别名也叫array,但它与Python的array不同。

1. ndarray的属性

  1. ndarray.ndim NumPy数组里axes个数
  2. ndarray.shape 数组的维度
  3. ndarray.size 数组元素个数
  4. ndarray.dtype 元素数据类型,object
  5. ndarray.itemsize 数组中每个元素的字节大小,等同于 ndarray.dtype.itemsize,即数据类型的长度

三、简单使用

1. 使用示例

import numpy as np
a = np.arange(15).reshape(3, 5)
print(a) 
''' 结果
[[ 0 1 2 3 4]
 [ 5 6 7 8 9]
 [10 11 12 13 14]]
'''
print(a.shape, a.ndim, a.dtype.name, a.itemsize, a.size) # (3, 5) 2 int64 8 15
print(type(a)) #

b = np.array([6, 7, 8]) 
print(b) # [6 7 8]
print(type(b)) # 

2. 创建数组

从python元组或数组中创建

a = np.array(1,2,3,4) # WRONG
a = np.array([1,2,3,4]) # RIGHT

将序列的序列转成二维数组

b = np.array([(1.5,2,3), (4,5,6)])
>>> b
array([[ 1.5, 2. , 3. ],
 [ 4. , 5. , 6. ]])

### 创建NumPy数组时指定类型
```c = np.array( [ [1,2], [3,4] ], dtype=complex )```

## 3. 创建特殊数组
### 创建全0数组

array([[ 0., 0., 0., 0.],

 [ 0., 0., 0., 0.],
 [ 0., 0., 0., 0.]])
### 创建全1数组

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)
### 随便创建一个数组

np.empty( (2,3) ) # uninitialized, output may vary
array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260],

 [ 5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])

创建range数组(第3个参数是步长)

np.arange( 10, 30, 5 )
array([10, 15, 20, 25])

创建序列,第3个参数是元素个数

array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])

四、基础操作

1. 元素按位 加 减 乘 除

import numpy as np

a = np.array([20, 30, 40, 50])
b = np.arange(4)
print(b)
c = a - b
print(c)
print(b ** 2)
print(10 * np.sin(a))
print(a < 20)
A = np.array([[1, 1], [0, 1]])


输出:

[0 1 2 3]
[20 29 38 47]
[0 1 4 9]
[ 9.12945251 -9.88031624 7.4511316 -2.62374854]
[False False False False]

2. 矩阵乘法

* 按元素进行运算

import numpy as np

a = np.array([20, 30, 40, 50])
b = np.arange(4)
print(a*b) #[ 0 30 80 150]

矩阵乘积 @或.dot

import numpy as np

a = np.array([20, 30, 40, 50])
b = np.arange(4)
print(a@b) # 260
print(a.dot(b)) # 260

3. 聚合函数

import numpy as np

b = np.arange(12).reshape(3, 4)
'''
输出
[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]]
'''
print(b)
print(b.sum(axis=0)) # [12 15 18 21]
print(b.min(axis=1)) # [0 4 8]

五、普通函数universal functions

按元素计算的普通函数:
sin, cons, exp,all, any, apply_along_axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor, inner, INV , lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sort, std, sum, trace, transpose, var, vdot, vectorize, where。

测试

numpy.all(a, axis=None, out=None, keepdims=)
沿轴与操作(全非0就返回True)。

numpy.any(a, axis=None, out=None, keepdims=)
沿轴或操作(有一个非0就返回True)。

numpy.apply_along_axis(func1d, axis, arr, *args, **kwargs)
沿轴进行func1d操作。

numpy.argmax(a, axis=None, out=None)
沿轴最大值的索引。

numpy.argmax(a, axis=None, out=None)
沿轴最小值的索引。

np.average
沿轴计算平均值。

numpy.bincount(x, weights=None, minlength=0)
遍历数组x, 创建新的数组y(长度是x中的最大值), 对于x中的每一个元素,执行y[x[i]] += 1 或 y[x[i]] += widht[i]

numpy.ceil
向上取整。

numpy.clip(a, a_min, a_max, out=None)
把数组限制在指定的区间内

numpy.conj(x, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) =
返回共轭复数。

numpy.cumprod(a, axis=None, dtype=None, out=None)
沿着轴把元素一个个相乘,并记录中间结果

numpy.cumsum(a, axis=None, dtype=None, out=None)
沿着轴把元素一个个相加,并记录中间结果

numpy.diff(a, n=1, axis=-1)
沿着轴对相邻的元素做差, 规则: out[n] = a[n+1] - a[n]

numpy.inner(a,b)
内积

六、索引、切片、迭代

1. 一维数组

import numpy as np

a = np.arange(10) ** 3
print(a) # [ 0 1 8 27 64 125 216 343 512 729]
print(a[2]) # 8
print(a[2:5]) # [ 8 27 64]
a[:6:2] = -1000 
# 等于 a[0:6:2] = -1000; 从0到6 每2个设置为-1000
print(a) # [-1000 1 -1000 27 -1000 125 216 343 512 729]
print(a[::-1]) # 倒序 [ 729 512 343 216 125 -1000 27 -1000 1 -1000]

2. 多维数组(重点)

import numpy as np


def f(x, y):
 return 10 * x + y


b = np.fromfunction(f, (5, 4), dtype=int)
print(b)
'''
[[ 0 1 2 3]
 [10 11 12 13]
 [20 21 22 23]
 [30 31 32 33]
 [40 41 42 43]]
'''
print(b[2, 3]) # 23
print(b[0:5, 1]) # [ 1 11 21 31 41]
print(b[:, 1]) # [ 1 11 21 31 41]
print(b[1:3, :])
'''
[[10 11 12 13]
 [20 21 22 23]]
'''
print(b[-1]) # [40 41 42 43]

for row in b:
 print(row)
'''
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]
'''

3. dots(...)

dots(...)表示许多个.
比如说 x 是一个5轴的数组,那么:

x[1,2,...] is equivalent to x[1,2,:,:,:],
x[...,3] to x[:,:,:,:,3] and
x[4,...,5,:] to x[4,:,:,5,:]

七、数组形状

vel() / reshape() / T
随机给定一个数组的形状

resize() 函数会改变原来数组的形状

八、不同数组的堆叠

  • np.vstack((a,b))
  • np.hstack((a,b))
  • np.column_stack((a,b))
  • r_
  • c_

相关推荐

Whoosh,纯python编写轻量级搜索工具

引言在许多应用程序中,搜索功能是至关重要的。Whoosh是一个纯Python编写的轻量级搜索引擎库,可以帮助我们快速构建搜索功能。无论是在网站、博客还是本地应用程序中,Whoosh都能提供高效的全文搜...

如何用Python实现二分搜索算法(python二分法查找代码)

如何用Python实现二分搜索算法二分搜索(BinarySearch)是一种高效的查找算法,适用于在有序数组中快速定位目标值。其核心思想是通过不断缩小搜索范围,每次将问题规模减半,时间复杂度为(O...

路径扫描 -- dirsearch(路径查找器怎么使用)

外表干净是尊重别人,内心干净是尊重自己,干净,在今天这个时代,应该是一种极高的赞美和珍贵。。。----网易云热评一、软件介绍Dirsearch是一种命令行工具,可以强制获取web服务器中的目录和文件...

78行Python代码帮你复现微信撤回消息!

来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。...

从零开始学习 Python!2《进阶知识》 Python进阶之路

欢迎来到Python学习的进阶篇章!如果你说已经掌握了基础语法,那么这篇就是你开启高手之路的大门。我们将一起探讨面向对象编程...

白帽黑客如何通过dirsearch脚本工具扫描和收集网站敏感文件

一、背景介绍...

Python之txt数据预定替换word预定义定位标记生成word报告(四)

续接Python之txt数据预定替换word预定义定位标记生成word报告(一)https://mp.toutiao.com/profile_v4/graphic/preview?pgc_id=748...

假期苦短,我用Python!这有个自动回复拜年信息的小程序

...

Python——字符串和正则表达式中的反斜杠(&#39;\&#39;)问题详解

在本篇文章里小编给大家整理的是关于Python字符串和正则表达式中的反斜杠('\')问题以及相关知识点,有需要的朋友们可以学习下。在Python普通字符串中在Python中,我们用'\'来转义某些普通...

Python re模块:正则表达式综合指南

Python...

Python中re模块详解(rem python)

在《...

python之re模块(python re模块sub)

re模块一.re模块的介绍1.什么是正则表达式"定义:正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特定的字符中,用正则表达字符来过滤的逻辑。(也是一种文本模式;)2、正则表达式可以帮助我们...

MySQL、PostgreSQL、SQL Server 数据库导入导出实操全解

在数字化时代,数据是关键资产,数据库的导入导出操作则是连接数据与应用场景的桥梁。以下是常见数据库导入导出的实用方法及代码,包含更多细节和特殊情况处理,助你应对各种实际场景。一、MySQL数据库...

Zabbix监控系统系列之六:监控 mysql

zabbix监控mysql1、监控规划在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。要进行监控的系统规划需要对Zabbix很了解,这里只是...

mysql系列之一文详解Navicat工具的使用(二)

本章内容是系列内容的第二部分,主要介绍Navicat工具的使用。若查看第一部分请见:...

取消回复欢迎 发表评论: