文本大数据之Numpy
初识Nmupy
NumPy是一个开源的Python科学计算库。它的主要功能之一是用来操作数组和矩阵;是科学计算、深度学习等高端领域的必备工具;使用TensorFlow、Caffe框架训练神经网络模型时,需要进行大量复杂的运算,可以直接调用NumPy里面的API。NumPy还包含了很多使用的数学函数,覆盖了很多的数学领域,比如线性代数、傅里叶变换、随机数生成。
NumPy基础
NumPy对象
在NumPy里,ndarray是整个numpy的基础,ndarray是N-dimensional array的缩写,是一种由同质元素组成的多维数组。元素数量是事先准备好的,同质指的是所有的元素类型一致。
它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。
ndarray中的每个元素在内存中使用相同大小的块。
ndarray中的每个元素是数据类型对象的对象(称为 dtype)。
从ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。
基本的Nmupy中的数组函数创建的如下:
numpy.array
它从任何暴露数组接口的对象,或从返回数组的任何方法创建一个ndarray
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数 | 描述 |
---|---|
object | 任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列 |
dtype | 数组的所需数据类型 |
copy | 默认为true,对象是否被复制 |
order | C(按行)、F(按列)或A(任意,默认)。 |
subok | 默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类 |
ndimin | 指定返回数组的最小维数 |
示例代码:
import numpy as py
a = [1,2,3,4,5,6,7,8,9]
print(a)
#结果如下
#[1,2,3,4,5,6,7,8,9]
a * 2
#结果如下
#[1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9]
print(type(a)
#结果如下
#<class 'list>
#把普通python中的list转换成ndarray
A = np.array(a)
print(A)
A
#print(A)结果如下
#[1,2,3,4,5,6,7,8,9]
#A结果如下
#array([1,2,3,4,5,6,7,8,9])
print(type(A))
#结果如下
#<class 'numpy.ndarray'>
A * 2
#结果如下
#array([2,4,6,8,10,12,14,16,18])
#直接创建一维数组
b = np.array([1,2,3,4,5])
print(b)
print(type(b))
#print(b)结果如下
#[1 2 3 4 5]
#print(type(b))结果如下
#<class 'numpy.ndarray'>
b * 6
#结果如下
#array([6,12,18,24,30])
NumPy数据类型
ndarray数据类型由一个叫dtype的numpy对象指定,每个ndarray只有一种dtype类型。数据类型对象描述了对应于数组的固定内存块的解释,取决于以下方面:
1.数据类型(整数、浮点或者 Python 对象)
2.数据大小
3.字节序(小端或大端)
4.在结构化类型的情况下,字段的名称,每个字段的数据类型,和每个字段占用的内存块部分。
5.如果数据类型是子序列,它的形状和数据类型。
字节顺序取决于数据类型的前缀<或>。<意味着编码是小端(最小有效字节存储在最小地址中)。>意味着编码是大端(最大有效字节存储在最小地址中)。
NumPy数组属性
属性 | 描述 |
---|---|
ndarry.shape | 这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小 |
ndarray.ndim | 这一数组属性返回数组的维数 |
ndarray.itemsize | 数组中每个元素的字节大小 |
ndarray.size | 数组元素的总个数 |
ndarray.dtype | 数组元素的数据类型,dtype类型可以用于创建数组中 |
ndarray.data | 包含实际数组元素的缓冲区地址 |
ndarray.flat | 数组元素的迭代器 |
数组的维数和
示例1如下:
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print(a.shape)
输出如下:
(2,3)
示例2如下:
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
a.shape = (3,2)
print(a.shape)
输出如下:
[[1 2]
[3 4]
[5 6]]
示例3.1如下:
import numpy as np
a = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
输出如下:
[[1 2 3 4]
[4 5 6 7]
[7 8 9 10]]
示例3.2如下:
a.shape = (4,3)
print(a)
输出如下:
[[1 2 3]
[4 4 5]
[6 7 7]
[8 9 10]]
注意:从(3,4)改为(4,3)并不是对数组进行转置,而是改变每个轴的大小,数组元素在内存中的位置并没有改变。
示例3.3如下:
a.shape = 2,-1
print(a)
输出如下:
[[ 1 2 3 4 4 5]
[ 6 7 7 8 9 10]]
注意:当某个轴的元素为-1时,将根据数组元素的个数自动计算此轴的长度。
示例3.4如下:
b = a.reshape(6,2)
print(b)
输出如下:
[[ 1 2]
[ 3 4]
[ 4 5]
[ 6 7]
[ 7 8]
[ 9 10]]
注意:使用数组的reshape方法,可以创建一个改变了尺寸的新数组,原数组的shape保持不变。
NumPy创建数组
numpy.empty
它创建指定形状和dtype的未初始化数组。 它使用以下构造函数:
numpy.empty(shape, dtype = float, order = 'C')
构造器接受下列参数:
参数 | 描述 |
---|---|
shape | 空数组的形状,整数或整数元祖 |
dtype | 所需的数组类型,可选 |
order | 'C’为按行的C风格数组,'F’为按列的Fortran风格数组 |
示例4.1如下:
#numpy.empty以随机的方式来创建数组
import numpy as np
c = np.empty([3,2], dtype=np.int32)
print(c)
输出如下:
#数组元素为随机值,因为它们未初始化
[[-1127970928 472]
[ 0 0]
[ 1 -2147483648]]
numpy.zeros
返回特定大小,以 0 填充的新数组
numpy.zeros(shape, dtype = float, order = 'C')
构造器接受下列参数:
参数 | 描述 |
---|---|
shape | 空数组的形状,整数或整数元祖 |
dtype | 所需的数组类型,可选 |
order | 'C’为按行的C风格数组,'F’为按列的Fortran风格数组 |
示例4.2.1如下:
#numpy.zeros返回指定的数组大小,并且以0作为填充
d = np.zeros([5,6],dtype=np.float32)
print(d)
输出如下:
[[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]]
示例4.2.2如下:
#numpy.zeros返回指定的数组大小,并且以0作为填充,默认类型
d = np.zeros([5,6],dtype=np.int32)
print(d)
输出如下:
[[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]]
numpy.zeros_like
示例4.3.1如下:
e = np.array([[1,2,3],[4,5,6]],dtype=np.float32)
print(e)
输出如下:
[[1. 2. 3.]
[4. 5. 6.]]
示例4.3.2如下:
f = np.zeros_like(e)
print(f)
输出如下:
[[0. 0. 0.]
[0. 0. 0.]]
示例4.3.3如下:
g = np.zeros_like(c)
print(g)
输出如下:
[[0 0]
[0 0]
[0 0]]
numpy.ones & numpy.ones_like
示例4.4如下:
h = np.ones_like(e)
print(h)
输出如下:
[[1. 1. 1.]
[1. 1. 1.]]
numpy.eye
返回对角线为1,其余为0的数组
示例4.5.1如下:
j = np.eye(5)
print(j)
输出如下:
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
示例4.5.2如下:
k = np.eye(5,dtype=np.int32)
print(k)
输出如下:
[[1 0 0 0 0]
[0 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]]
NumPy现有数据创建数组
numpy.asarray
numpy.asarray(a, dtype = None, order = None)
示例5.1.1如下:
# 将列表转换为 ndarray
import numpy as np
x = [1,2,3]
a = np.asarray(x)
print(a)
输出如下:
[1 2 3]
示例5.1.2如下:
# 设置了dtype
import numpy as np
x = [1,2,3]
a = np.asarray(x, dtype = float)
print(a)
输出如下:
[1. 2. 3.]
示例5.1.3如下:
# 来自元组的 ndarray
import numpy as np
x = (1,2,3)
a = np.asarray(x)
print(a)
输出如下:
[1 2 3]
示例5.1.4如下:
# 来自元组列表的 ndarray
import numpy as np
x = [(1,2,3),(4,5)]
a = np.asarray(x)
print(a)
输出如下:
[(1, 2, 3) (4, 5)]
numpy.arange
类似于python的range函数,通过指定开始值、终值和步长来创建一维数组,注意数组不包括终值。
numpy.linspace
指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定是否包含终值,缺省设置是包括终值。
numpy.logspace
和numpy.linspace类似,但是numpy.logspace创建等比数列