python学习---numpy
好的视频网址:https://www.bilibili.com/video/BV1na411c7Yy
https://www.numpy.org.cn/user/quickstart.html#%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C
数组的创建:
创建数组有5种常规机制:
- 从其他Python结构(例如,列表,元组)转换
- numpy原生数组的创建(例如,arange、ones、zeros, linespace等)
- 从磁盘读取数组,无论是标准格式还是自定义格式
- 通过使用字符串或缓冲区从原始字节创建数组
- 使用特殊库函数(例如,random)
- 数组的创建(Array Creation) - arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, zeros, zeros_like
https://www.numpy.org.cn/user/basics/creation.html#numpy%E5%8E%9F%E7%94%9F%E6%95%B0%E7%BB%84%E7%9A%84%E5%88%9B%E5%BB%BA
numpy的基本变属性:
- ndarray.ndim - 数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank。
- ndarray.shape - 数组的维度。这是一个整数的元组,表示每个维度中数组的大小。对于有 n 行和 m 列的矩阵,
shape
将是(n,m)
。因此,shape
元组的长度就是rank或维度的个数ndim
。 - ndarray.size - 数组元素的总数。这等于
shape
的元素的乘积。 - ndarray.dtype - 一个描述数组中元素类型的对象。可以使用标准的Python类型创建或指定dtype。另外NumPy提供它自己的类型。例如numpy.int32、numpy.int16和numpy.float64。
- ndarray.itemsize - 数组中每个元素的字节大小。例如,元素为
float64
类型的数组的itemsize
为8(=64/8),而complex32
类型的数组的itemsize
为4(=32/8)。它等于ndarray.dtype.itemsize
。 - ndarray.data - 该缓冲区包含数组的实际元素。通常,我们不需要使用此属性,因为我们将使用索引访问数组中的元素
数组的索引:
分为以下几类:
1.单元素索引;
2.切片和跨步索引;
3.索引数组
4.索引多维数组;
5.组合切片与数组索引;
数组的基本操作:
1. +-*/:广播类型的;
2.通用函数:点乘(np.dot(a,b)
常用的是,dot, sum,mean, max, min, std,
另见这些通函数
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
3. 常用的API
以下是按类别排序的一些有用的NumPy函数和方法名称的列表。有关完整列表,请参阅参考手册里的常用API。
- 数组的创建(Array Creation) - arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, zeros, zeros_like
- 转换和变换(Conversions) - ndarray.astype, atleast_1d, atleast_2d, atleast_3d, mat
- 操纵术(Manipulations) - array_split, column_stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, ndarray.item, newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, transpose, vsplit, vstack
- 询问(Questions) - all, any, nonzero, where,
- 顺序(Ordering) - argmax, argmin, argsort, max, min, ptp, searchsorted, sort
- 操作(Operations) - choose, compress, cumprod, cumsum, inner, ndarray.fill, imag, prod, put, putmask, real, sum
- 基本统计(Basic Statistics) - cov, mean, std, var
- 基本线性代数(Basic Linear Algebra) - cross, dot, outer, linalg.svd, vdot
https://www.numpy.org.cn/user/quickstart.html#%E5%8A%9F%E8%83%BD%E5%92%8C%E6%96%B9%E6%B3%95%E6%A6%82%E8%BF%B0
4.增删改查:
增:
插入:insert
numpy.insert(arr,obj,value,axis=None)
value为插入的数值
arr:为目标向量
obj:为目标位置
value:为想要插入的数值
axis:为插入的维度
np.insert(a,1,[1,1,1,1],0)
Out[309]:
array([[ 0, 1, 2, 3],
[ 1, 1,
1, 1],
[ 4, 5,
6, 7],
[ 8, 9, 10, 11]])
来自 <https://blog.csdn.net/weixin_35834894/article/details/100114021>
append
将values插入到目标arr的最后。
注意,这里values跟arr应该为相同维度的向量,例如,如下第一个为错误情况。
a
Out[312]:
array([[ 0, 1, 2, 3],
[ 4,
5, 6, 7],
[ 8, 9, 10, 11]])
np.append(a,[[1,1,1,1]],axis=0)
Out[313]:
array([[ 0, 1, 2, 3],
[ 4, 5,
6, 7],
[ 8, 9, 10, 11],
[ 1, 1,
1, 1]])
来自 <https://blog.csdn.net/weixin_35834894/article/details/100114021>
删:
lines_rest = np.delete(lines,0,0)
#第一个参数:要处理的矩阵,第二个参数,处理的位置,第三个参数,0表示按照行删除,1表示按照列删除
#返回值为,删除后的剩余元素构成的矩阵
来自 <https://www.cnblogs.com/shuangcao/p/11326505.html>
改:
直接索引之后直接赋值;
查:
查询
有两种方式
一种就是直接用切片的方式
a[:,:2]
array([[0, 1],
[4, 5],
[8, 9]])
第二种就是用where
np.where(a>2)
(array([0, 1, 1, 1, 1, 2, 2, 2, 2]), array([3, 0, 1, 2, 3, 0, 1, 2, 3]))
来自 <https://blog.csdn.net/weixin_35834894/article/details/100114021>