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

NumPy 入门+使用速查

ztj100 2025-02-10 15:16 17 浏览 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_

相关推荐

Vue3非兼容变更——函数式组件(vue 兼容)

在Vue2.X中,函数式组件有两个主要应用场景:作为性能优化,因为它们的初始化速度比有状态组件快得多;返回多个根节点。然而在Vue3.X中,有状态组件的性能已经提高到可以忽略不计的程度。此外,有状态组...

利用vue.js进行组件化开发,一学就会(一)

组件原理/组成组件(Component)扩展HTML元素,封装可重用的代码,核心目标是为了可重用性高,减少重复性的开发。组件预先定义好行为的ViewModel类。代码按照template\styl...

Vue3 新趋势:10 个最强 X 操作!(vue.3)

Vue3为前端开发带来了诸多革新,它不仅提升了性能,还提供了...

总结 Vue3 组件管理 12 种高级写法,灵活使用才能提高效率

SFC单文件组件顾名思义,就是一个.vue文件只写一个组件...

前端流行框架Vue3教程:17. _组件数据传递

_组件数据传递我们之前讲解过了组件之间的数据传递,...

前端流行框架Vue3教程:14. 组件传递Props效验

组件传递Props效验Vue组件可以更细致地声明对传入的props的校验要求...

前端流行框架Vue3教程:25. 组件保持存活

25.组件保持存活当使用...

5 个被低估的 Vue3 实战技巧,让你的项目性能提升 300%?

前端圈最近都在卷性能优化和工程化,你还在用老一套的Vue3开发方法?作为摸爬滚打多年的老前端,今天就把私藏的几个Vue3实战技巧分享出来,帮你在开发效率、代码质量和项目性能上实现弯道超车!一、...

绝望!Vue3 组件频繁崩溃?7 个硬核技巧让性能暴涨 400%!

前端的兄弟姐妹们五一假期快乐,谁还没在Vue3项目上栽过跟头?满心欢喜写好的组件,一到实际场景就频频崩溃,页面加载慢得像蜗牛,操作卡顿到让人想砸电脑。用户疯狂吐槽,领导脸色难看,自己改代码改到怀疑...

前端流行框架Vue3教程:15. 组件事件

组件事件在组件的模板表达式中,可以直接使用...

Vue3,看这篇就够了(vue3 从入门到实战)

一、前言最近很多技术网站,讨论的最多的无非就是Vue3了,大多数都是CompositionAPI和基于Proxy的原理分析。但是今天想着跟大家聊聊,Vue3对于一个低代码平台的前端更深层次意味着什么...

前端流行框架Vue3教程:24.动态组件

24.动态组件有些场景会需要在两个组件间来回切换,比如Tab界面...

前端流行框架Vue3教程:12. 组件的注册方式

组件的注册方式一个Vue组件在使用前需要先被“注册”,这样Vue才能在渲染模板时找到其对应的实现。组件注册有两种方式:全局注册和局部注册...

焦虑!Vue3 组件频繁假死?6 个奇招让页面流畅度狂飙 500%!

前端圈的朋友们,谁还没在Vue3项目上踩过性能的坑?满心期待开发出的组件,一到高并发场景就频繁假死,用户反馈页面点不动,产品经理追着问进度,自己调试到心态炸裂!别以为这是个例,不少人在电商大促、数...

前端流行框架Vue3教程:26. 异步组件

根据上节课的代码,我们在切换到B组件的时候,发现并没有网络请求:异步组件:...

取消回复欢迎 发表评论: