numpy库使用总结

numpy study

0x01:n维数组对象ndaarray
存放同类型元素的多维数组

0x02:numpy数据类型
numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等。
字定义结构化数据类型:

import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student)
print(a)

0x03:数组的属性
ndarray.ndim: 秩,即轴的数量或维度的数量
ndarray.shape 数组的维度,对于矩阵,n 行 m 列
ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
NumPy 也提供了 reshape 函数来调整数组大小。

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

0x04:创建数组
numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:

x = np.empty([3,2], dtype = int)
print (x)

numpy.zeros/ones 创建指定大小的数组,数组元素以 0/1 来填充:

x = np.zeros(5)
print(x)

x = np.ones(5)
print(x)

0x05:从已有的数组中创建数组
umpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个。

numpy.asarray(a, dtype = None, order = None)
a   任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组
dtype   数据类型,可选
order   可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。

0x06:从数值范围创建数组
numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:

numpy.arange(start, stop, step, dtype)

numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

umpy.logspace 函数用于创建一个于等比数列。格式如下:

np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

0x07:切片和索引
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

a = np.arange(10)
s = slice(2,7,2)   # 从索引 2 开始到索引 7 停止,间隔为2
print (a[s])

冒号 : 的解释:如果只放置一个参数,如 [2],将返回与该索引相对应的单个元素。如果为 [2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。

import numpy as np
a = np.arange(10)
print(a[2:])

多维数组同样适用上述索引提取方法:提取出的为某一行之后的数组

a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a)
# 从某个索引处开始切割
print('从数组索引 a[1:] 处开始切割')
print(a[1:])

0x08:高级索引
整数数组索引:两个数组对应元素映射确定一个位置
以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素。

x = np.array([[1,  2],  [3,  4],  [5,  6]])
y = x[[0,1,2],  [0,1,0]]
print (y)

0x09:numpy广播
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。
如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

a = np.array([1,2,3,4])
b = np.array([10,20,30,40])
c = a * b
print (c)

输出结果为:
[ 10  40  90 160]

当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。如:

a = np.array([[ 0, 0, 0],
       [10,10,10],
       [20,20,20],
       [30,30,30]])
b = np.array([1,2,3])
print(a + b)

输出结果为:
[[ 1  2  3]
 [11 12 13]
 [21 22 23]
 [31 32 33]]

4x3 的二维数组与长为 3 的一维数组相加,等效于把数组 b 在二维上重复 4 次再运算:

0x10:迭代数组
NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。
迭代器最基本的任务的可以完成对数组元素的访问。
接下来我们使用 arange() 函数创建一个 2X3 数组,并使用 nditer 对它进行迭代。
实例

a = np.arange(6).reshape(2,3)
print ('原始数组是:')
print (a)
print ('\n')
print ('迭代输出元素:')
for x in np.nditer(a):
    print (x, end=", " )
print ('\n')

控制遍历顺序:
for x in np.nditer(a, order=‘F‘):Fortran order,即是列序优先;
for x in np.nditer(a.T, order=‘C‘):C order,即是行序优先;

修改数组中元素的值
nditer 对象有另一个可选参数 op_flags。 默认情况下,nditer 将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 write-only 的模式。

实例

import numpy as np

a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('原始数组是:')
print (a)
print ('\n')
for x in np.nditer(a, op_flags=['readwrite']):
    x[...]=2*x
print ('修改后的数组是:')
print (a)

输出结果为:

原始数组是:
[[ 0  5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

修改后的数组是:
[[  0  10  20  30]
 [ 40  50  60  70]
 [ 80  90 100 110]]

0x11:数组操作
Numpy 中包含了一些函数用于处理数组,大概可分为以下几类:修改数组形状、翻转数组、修改数组维度、连接数组、分割数组、数组元素的添加与删除

numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr, newshape, order=‘C‘)

numpy.ndarray.flat 是一个数组元素迭代器,实例如下:

import numpy as np
a = np.arange(9).reshape(3,3)
print ('原始数组:')
for row in a:
    print (row)

# 对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器:
print ('迭代后的数组:')
for element in a.flat:
    print (element)

输出结果如下:
原始数组:
[0 1 2]
[3 4 5]
[6 7 8]
迭代后的数组:
0
1
2
3
4
5
6
7
8

flat方法与前面nditer不同的是,nditer是numpy中的一个方法,且默认是只读对象,而flat方法是数组对象的方法。

numpy.ravel() 展平的数组元素,顺序通常是"C风格",返回的是数组视图(view,有点类似 C/C++引用reference的意味),修改会影响原始数组。可以简单的理解成把多为数组转换成一维数组
该函数接收两个参数:
numpy.ravel(a, order=‘C‘)

numpy.transpose 函数用于对换数组的维度,行变列,格式如下:
numpy.transpose(arr, axes)
参数说明:
arr:要操作的数组
axes:整数列表,对应维度,通常所有维度都会对换。

numpy.ndarray.T 类似 numpy.transpose:列变行

numpy.swapaxes 函数用于交换数组的两个轴,格式如下:
numpy.swapaxes(arr, axis1, axis2)
arr:输入的数组
axis1:对应第一个轴的整数
axis2:对应第二个轴的整数

连接数组

|函数|描述|
|:--|:|
|concatenate|连接沿现有轴的数组序列|
|stack|沿着新的轴加入一系列数组|
|hstack|水平堆叠序列中的数组(列方向)|
|vstack|竖直堆叠序列中的数组(行方向)|

分割数组

|函数| |数组及操作|
|:|:|
|split| 将一个数组分割为多个子数组
|hsplit| 将一个数组水平分割为多个子数组(按列)
|vsplit |将一个数组垂直分割为多个子数组(按行)

数组元素的添加与删除

|函数 |元素及描述
|:|:|
|resize |返回指定形状的新数组
|append |将值添加到数组末尾
|insert |沿指定轴将值插入到指定下标之前
|delete |删掉某个轴的子数组,并返回删除后的新数组
|unique |查找数组内的唯一元素

0x12:numpy位运算
NumPy "bitwise_" 开头的函数是位运算函数。
NumPy 位运算包括以下几个函数:

|函数|描述
|:|:|
|bitwise_and|对数组元素执行位与操作
|bitwise_or |对数组元素执行位或操作
|invert |按位取反
|left_shift |向左移动二进制表示的位
|right_shift|向右移动二进制表示的位

0x13:numpy字符串函数
以下函数用于对 dtype 为 numpy.string_ 或 numpy.unicode_ 的数组执行向量化字符串操作。 它们基于 Python 内置库中的标准字符串函数。这些函数在字符数组类(numpy.char)中定义。

|函数 |描述
|:|
|add() |对两个数组的逐个字符串元素进行连接,元素之间进行映射
|multiply() |返回按元素多重连接后的字符串,把一个字符串返回多次
|center() |居中字符串,并使用指定字符在左侧和右侧进行填充。
|capitalize() |将字符串第一个字母转换为大写
|title() |将字符串的每个单词的第一个字母转换为大写
|lower() |对数组的每个元素转换为小写。它对每个元素调用 str.lower。
|upper() |函数对数组的每个元素转换为大写。它对每个元素调用 str.upper。
|split() |通过指定分隔符对字符串进行分割,并返回数组。默认情况下,分隔符为空格。
|splitlines() |函数以换行符作为分隔符来分割字符串,并返回数组。
|strip() |移除元素开头或者结尾处的特定字符
|join() |通过指定分隔符来连接数组中的元素
|replace() |使用新字符串替换字符串中的所有子字符串
|decode() |数组元素依次调用str.decode
|encode() |数组元素依次调用str.encode

0x14:numpy的数学计算
NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等.

三角函数:NumPy 提供了标准的三角函数:sin()、cos()、tan()。

numpy.around() 函数返回指定数字的四舍五入值
numpy.around(a,decimals)
参数说明:
a: 数组
decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置

numpy.floor() 返回数字的下舍整数。

numpy.ceil() 返回数字的上入整数。

0x15:numpy的算术函数
NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide()。

print ('两个数组相加:')
print (np.add(a,b))

print ('两个数组相减:')
print (np.subtract(a,b))

print ('两个数组相乘:')
print (np.multiply(a,b))

print ('两个数组相除:')
print (np.divide(a,b))

numpy.reciprocal() 函数返回参数逐元素的倒数。如 1/4 倒数为 4/1。

a = np.array([0.25,  1.33,  1,  100])
print ('我们的数组是:')
print (a)
print ('\n')
print ('调用 reciprocal 函数:')
print (np.reciprocal(a))

numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂

numpy.mod() 计算输入数组中相应元素的相除后的余数。 函数 numpy.remainder() 也产生相同的结果。参数是两个数组,第一个数组里的元素做被除数,返回一个余数组成的数组

0x16:numpy统计函数
NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等:

numpy.amin() 用于计算数组中的元素沿指定轴的最小值。1表示一行中最小,0表示一列中最小 空表示数组中最小
numpy.amax() 用于计算数组中的元素沿指定轴的最大值。

a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print (a)

print (np.amin(a,1))

print (np.amin(a,0))

print (np.amax(a))

print (np.amax(a, axis =  0))

mpy.ptp()函数计算数组中元素最大值与最小值的差(最大值 - 最小值)

print ('调用 ptp() 函数:')
print (np.ptp(a))

print ('沿轴 1 调用 ptp() 函数:')
print (np.ptp(a, axis =  1))

print ('沿轴 0 调用 ptp() 函数:')
print (np.ptp(a, axis =  0))

numpy.median() 函数用于计算数组 a 中元素的中位数(中值):按行、列或整个数组计算

numpy.mean() 函数返回数组中元素的算术平均值:按行、列或整个数组计算

numpy.average() 函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。

0x17:numpy排序、条件筛选函数
排序算法:‘quicksort‘(快速排序) ‘mergesort‘(归并排序) ‘heapsort‘(堆排序)
numpy.sort() 函数返回输入数组的排序副本。函数格式如下:
numpy.sort(a, axis, kind, order)
参数说明:
a: 要排序的数组
axis: 沿着它排序数组的轴,如果没有数组会被展开,沿着最后的轴排序, axis=0 按列排序,axis=1 按行排序
kind: 默认为‘quicksort‘(快速排序)
order: 如果数组包含字段,则是要排序的字段

numpy.argsort() 函数返回的是数组值从小到大的索引值。

numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。

numpy.where() 函数返回输入数组中满足给定条件的元素的索引。

numpy.extract() 函数根据某个条件从数组中抽取元素,返回满条件的元素。

0x18:numpy矩阵库(matrix)
matlib.empty() 函数返回一个新的矩阵,语法格式为:
numpy.matlib.empty(shape, dtype, order)
参数说明:
shape: 定义新矩阵形状的整数或整数元组
Dtype: 可选,数据类型
order: C(行序优先) 或者 F(列序优先)

import numpy.matlib
import numpy as np
print (np.matlib.empty((2,2)))
  • numpy.matlib.zeros() 函数创建一个以 0 填充的矩阵。
  • numpy.matlib.ones()函数创建一个以 1 填充的矩阵。
  • numpy.matlib.rand() 函数创建一个给定大小的矩阵,数据是随机填充的。
  • numpy.matlib.identity() 函数返回给定大小的单位矩阵。单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0。

numpy.matlib.eye() 函数返回一个矩阵,对角线元素为 1,其他位置为零。
numpy.matlib.eye(n, M,k, dtype)
参数说明:
n: 返回矩阵的行数
M: 返回矩阵的列数,默认为 n
k: 对角线的索引
dtype: 数据类型
实例:

import numpy.matlib
import numpy as np
print (np.matlib.eye(n =  3, M =  4, k =  0, dtype =  float))

0x19:numpy线性代数
NumPy 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明:

|函数 |描述
|:|
|dot |两个数组的点积,即元素对应相乘。
|vdot |两个向量的点积
|inner ||两个数组的内积
|matmul |两个数组的矩阵积
|determinant |数组的行列式
|solve |求解线性矩阵方程
|inv |计算矩阵的乘法逆矩阵

numpy 和 matplotlib

from matplotlib import pyqlot as plt

plt.title 图形标题
plt.xlable x轴标题
plt.ylable y轴标题
plt.plot(x, y) 画图
plt.show() 显示图
plt.hist

subplot() 函数允许你在同一图中绘制不同的东西,就是说可以把一块画布分为若干个子画布,在子画布画不同的东西。子画布能分多少。取决于为子画布设置的高和宽。函数需要三个参数,第一个是子画布的高,第二个是子画布的宽,第三个是子画布的序号。子画布的实际高和宽是你设置高和宽的倒数,加入设置高为4,宽为2,那么子画布的实际高和宽就是整个画布的1/4 1/2,高和宽设置的越小,子画布分数量越多。所有子画布的高或宽不能超过1

bar() 函数来生成条形图:传入的两个数组元素数量必须相等,具有画图功能,代替上面的plt.plot

numpy.histogram() 函数是数据的频率分布的图形表示。 水平尺寸相等的矩形对应于类间隔,称为 bin,变量 height 对应于频率。
numpy.histogram()函数将输入数组和 bin 作为两个参数。 bin 数组中的连续元素用作每个 bin 的边界。

原文地址:https://www.cnblogs.com/liangxiyang/p/11594093.html

时间: 2024-10-28 22:00:37

numpy库使用总结的相关文章

数据分析之Numpy库入门

1.列表与数组 在python的基础语言部分,我们并没有介绍数组类型,但是像C.Java等语言都是有数组类型的,那python中的列表和数组有何区别呢? 一维数据:都表示一组数据的有序结构 区别: 列表:数据类型可以不同,如:[3.1413,'pi',3.1404,[3.1402,2.34],'3.2376'] 数组:数据类型相同 .如[3.14,34.34,3433.3,343.23] 二维数据:二维数据由多个一维数据构成,是一维数据的集合形式!表格是典型的二维数据! 注意:表格的表头,可以是

Numpy库进阶教程(二)

第一篇在这里:Numpy库进阶教程(一)求解线性方程组 求解特征值和特征向量 关于特征值和特征向量的介绍,可以点击这里 首先创建一个矩阵 In [1]: A=mat("3 -2;1 0") In [2]: A Out[2]: matrix([[ 3, -2], [ 1, 0]]) 在numpy.linalg模块中,eigvals函数可以计算矩阵的特征值,而eig函数可以返回一个包含特征值和对应特征向量的元组. 使用eigvals函数求解特征值 In [3]: linalg.eigval

数据分析与展示——NumPy库入门

这是我学习北京理工大学嵩天老师的<Python数据分析与展示>课程的笔记.嵩老师的课程重点突出.层次分明,在这里特别感谢嵩老师的精彩讲解. NumPy库入门 数据的维度 维度是一组数据的组织形式.数据维度就是在数据之间形成特定关系表达多种含义的一个概念. 一维数据: 一维数据由对等关系的有序或无序数据构成,采用线性方式组织.对应列表.数组和集合等概念. 列表和数组:一组数据的有序结构. 区别: 列表:数据类型可以不同 数组:数据类型相同 二维数据: 二维数据由多个一维数据构成,是一维数据的组合

Panda和numpy库和matplotlib库的安装

好久没有用python了 论文决定使用python 朴素贝叶斯和逻辑斯蒂 手生....连cmd命令都快忘记了 所以来重新复习一遍:cd C: 也就是在cmd中,可以敲打cd加上盘符的冒号就可以切换, 其次就是,使用pip install 下载包,但是要先进入Python27/Scpripts 才可以 而我是忘记了..直接在Python27里面用了...不过也没有提示我如何 只是说我的pip要更新  由于直接给出了一个命令提示 ' python -m pip install --upgrade p

python数据分析实战-第3章-numpy库

第3章 NumPy库 32 3.1 NumPy简史 32 3.2 NumPy安装 32 3.3 ndarray:NumPy库的心脏 33 1 import numpy as np 1 a = np.array([1, 2, 3]) 1 a array([1, 2, 3]) 1 type(a), a.dtype, a.ndim, a.size, a.shape, a.itemsize (numpy.ndarray, dtype('int64'), 1, 3, (3,), 8) 1 b = np.a

python——Numpy库

Numpy库 英文官方文档:https://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html Numpy库中的数组对象:N维数组类型:ndarray 1)      ndarray的作用: a)      数组对象性可以去掉元素间运算所需的循环,使一维向量更像单个数据. b)     设置专门的数组对象,经过优化,可以提升这类应用的运算速度. 2)      ndarray是一个多维数组对象,有两部分组成: 实际的数据 和 描述这些数据

NumPy库实现矩阵计算

随着机器学习技术越来越向着整个社会进行推广,因此学好线性代数和Python当中的numpy库就相当重要了.我们应该知道numpy库的使用是sklearn库和opencv库的基础.主要用于矩阵的计算.当然,我们做做数模或者人工神经网络建模也可以使用MATLAB.不过现在Python才是现在的主流,因为Python可以用于服务器后台的实现,不仅仅看可以用于科研,还可以做出一些比较实用的一些东西.如果还想用于物联网等领域的话,则可以使用C++进行算法的实现.因为我们在嵌入式开发当中,一般使用的是lin

Numpy库的学习(一)

今天来学习一下Python库中,支持高级大量的维度数组与矩阵运算的神奇的Numpy库 Numpy同时也对数组运算提供大量的数学函数,对于大量计算运行效率极好 是大量机器学习框架的基础库 废话不多说,直接开整 Numpy中最核心的结构就是ndarray数组 Numpy中定义的最重要的对象是成为ndarray的N维数组类型 它描述相同类型的元素集合.可以使用基于零的索引访问集合中的项目.大部分的数组操作仅仅是修改元数据部分,而不改变其底层的实际数据. 数组的维数称为秩,简单来说就是如果你需要获取数组

Numpy库的学习(五)

今天继续学习一下Numpy库,废话不多说,整起走 先说下Numpy中,经常会犯错的地方,就是数据的复制 这个问题不仅仅是在numpy中有,其他地方也同样会出现 import numpy as np a = np.arange(12) b = a print(b is a) b.shape = 3,4 print(a.shape) print(id(a)) print(id(b)) 先看看这段代码,我们随便建立了一个numpy数组 然后我想把a这个值,赋值给b,很简单的操作,b = a 那么我们打

用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)

在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将在此基础上再引入成交量效果图,并结合量价理论,给出并验证一些交易策略. 1 成交量对量化分析的意义 美国的股市分析家葛兰碧(Joe Granville)在他所著的<股票市场指标>一书里提出著名的“量价理论”.“量价理论”的核心思想是,任何对股价的分析,如果离开了对成交量的分析,都将是无本之木,无水