NLP前置技术——Numpy的实现
发布时间
阅读量:
阅读量
Numpy包成了python科学计算的扩展包,在很多多维数组、大型数组numpy的使用时最多的。
对于numpy包的使用,最好的了解方式就是通过官网了,http://www.numpy.org/
ndarray(N-dimensional array)
1、在numpy里,ndarray他是N-demensional array英文的缩写。他是一种由同质元素组成的多维数组。元素数量是事先准备好的,同质值得是所有元素类型一致。ndarray数据类型由一个叫dtype的numpy对象指定,每个ndarray只有一种dtype类型。
数组的维数和元素数量由数组的型(shape)来确定,shape由n个正整数组成的元组来指定,元组的每个元素对应每一堆的大小,数组的堆统称为轴(axis),轴的数量叫做秩(rank)。
ndarray还有一个特定就是大小固定,创建ndarray一旦制定了大小,其大小就不会再发生改变,而python列表是可以改变的。
2、定义ndarry
使用array()函数定义,以 python列表作为参数,创建之后列表的元素就是ndarray的元素。
首先可以通过一个例子简单了解array()的用法
import numpy as np #导入numpy
a=[1,2,3,4,5,6,7,8,9]
print(a)
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]
对于数组a,我们希望实现将数组a中的元素扩大为原来的两倍
a*2
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]
但是所得的结果是将数组a复制了,不是我们想得到的结果。
其原因在于此时的数组a的类型是列表,我们无法直接相乘,必须先转换为ndarray类型。
# 检验数据类型
print(type(a))
>>> <class 'list'>
#把普通python中的list转换成ndarray
A=np.array(a)
print(A)
A
>>> [1 2 3 4 5 6 7 8 9]
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])
把类型转换后,就可以得到我们想要的结果。
ndarray的基本属性
| 属性 | 描述 |
|---|---|
| ndarray.ndim | 查看数组的维数 |
| ndarray.shape | 查看数组有几行几列 |
| ndarray.size | 查看数组中元素个数 |
| ndarray.itemsize | 查看每个元素所占字节大小 |
| ndarray.dtype | 查看数组元素中数据类型 |
| ndarray.data | 实际数组元素的缓冲区地址 |
| ndarray.flat | 数组元素迭代器 |
创建多维数组
#直接创建一维数组
b=np.array([1,2,3,4])
print(b)
print(type(b))
>>>[1 2 3 4]
<class 'numpy.ndarray'>
#创建n维数组
c = np.array([[1,2,3],[4,5,6]])
print(c)
print(type(c))
>>> [[1 2 3] [4 5 6]]
<class 'numpy.ndarray'>
print(c.ndim)#有几个中括号就是几维
>>>2
print(c.shape)
>>> (2, 3)
print(c.size)
>>> 6
print(c.itemsize)
>>> 4
e = np.array([1,2,3,4,5,6],ndmin = 3) #创建指定的多维数组
print(e)
>>> [[[1 2 3 4 5 6]]]
f = np.array([1,2,3,4,5,6],ndmin = 3,dtype = np.complex) #创建指定维数以及数据类型的多维数组
print(f)
>>> [[[1.+0.j 2.+0.j 3.+0.j 4.+0.j 5.+0.j 6.+0.j]]]
可以通过修改数组的shape属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度。
g = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(g)
>>>
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
print(g.shape)
>>>
(4, 3)
g.shape = 3,4
print(g)
>>>
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
注意:以上从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的位置是没有改变的。
g.shape = 2,-1
print(g)
>>>
[[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]]
以上,当某个轴的元素为-1时,将根据数组元素的个数自动计算此轴的长度
h = g.reshape(6,2)
print(h)
>>>
[[ 1 2]
[ 3 4]
[ 5 6]
[ 7 8]
[ 9 10]
[11 12]]
以上,创建一个改变尺寸的新数组,原数组的shape保持不变。
数组的创建
| 操作 | 描述 |
|---|---|
| numpy.empty() | 随机创建空数组 |
| nump.zeros() | 返回指定大小的数组,并且以0作为填充 |
| nump.zeros_like() | 返回类型相同的以0作为填充的数组 |
| nump.eye() | 创建对角线为1其余为0的数组 |
| nump.arange(i,j,k) | 创建从i开始,j结束步长为k的一维数组,不包括终止值 |
| nump.linspace(i,j,k) | 创建一个i为起始值,j为终止值,元素个数为k的数组,包括终止值 |
全部评论 (0)
还没有任何评论哟~
