本文旨在使Python初学者对numpy包有一个基本的了解,能够使用numpy包中的函数进行基本操作,了解各个函数所需要的参数和对应的功能,能够利用numpy解决一些实际问题。下面开始我们的学习
numpy是什么
numpy是Python的一个包,它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。numpy包含两种基本的数据类型,数组和矩阵。
numpy中的ndarray对象
基本的ndarray对象是通过numpy中的数组函数创建的
numpy.array()
这个函数的参数如下所示
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
- object 函数处理的对象
- dtype 数组的数据类型,int,float,complex等
- copy 可选,默认为true,对象是否被复制。
- order C(按行)、F(按列)或A(任意,默认)。
- subok 默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类。
- ndmin 指定返回数组的最小维数。
下面通过几个例子来解释:
例一
import numpy as np
a=np.array([1,2,3])
print(a)
#输出为[1,2,3]
例二
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a)
#输出为[[1 2 3]
# [4 5 6]]
例三
import numpy as np
a=np.array([1,2,3,4],ndmin=2)
print(a)
#输出为[[1 2 3 4]]
例四
import numpy as np
a=np.array([1,2,3,4],dtype=np.float)
print(a)
#输出为[1. 2. 3. 4.]
numpy的数据类型
数据类型 | 解释 |
---|---|
bool | 存储为一个字节的布尔值(真或假) |
int | 默认整数,相当于 C 的long,通常为int32或int64 |
intc | 相当于 C 的int,通常为int32或int64 |
intp | 用于索引的整数,相当于 C 的size_t通常为int32或int64 |
int8 | 字节(-128 ~ 127) |
int16 | 16 位整数(-32768 ~ 32767) |
int32 | 32 位整数(-2147483648 ~ 2147483647) |
int64 | 64 位整数(-9223372036854775808 ~ 9223372036854775807) |
uint8 | 8 位无符号整数(0 ~ 255) |
uint16 | 16 位无符号整数(0 ~ 65535) |
uint32 | 32 位无符号整数(0 ~ 4294967295) |
uint64 | 64 位无符号整数(0 ~ 18446744073709551615) |
float | float64的简写 |
float16 | 半精度浮点:符号位,5 位指数,10 位尾数 |
float32 | 单精度浮点:符号位,8 位指数,23 位尾数 |
float64 | 双精度浮点:符号位,11 位指数,52 位尾数 |
complex | complex128的简写 |
complex64 | 复数,由两个 32 位浮点表示(实部和虚部) |
complex128 | 复数,由两个 64 位浮点表示(实部和虚部) |
数据类型对象dtype
dtype由以下语法构造
numpy.dtype(object, align, copy)
- object:被操作的对象
- align:如果为true,则向字段添加间隔,使其类似 C 的结构体。
- copy : 生成dtype对象的新副本,如果为flase,结果是内建数据类型对象的引用。
例一
import numpy as np
a=np.dtype(np.int32)
print(a)
#输出为int32
int8,int16,int32,int64分别等同于字符串‘i1’,‘i2’,‘i4’,‘i8’
例二
import numpy as np
a=np.dtype('i8')
print(a)
#输出为int64
例三
接下来是结构化数据类型
import numpy as np
a=np.dtype([('score',np.int8)])
print(a)
#输出为[('score', 'i1')]
例四
import numpy as np
student=np.dtype([('name','S10'),('age',np.int8),('score',np.float)])
a=np.array([('duning',19,98.5),('muss',20,97.5)],dtype=student)
print(a)
输出为[(b'duning', 19, 98.5) (b'muss', 20, 97.5)]
每个数据类型都有唯一的字符代码:
- ‘b’:布尔值
- ‘i’:符号整数
- ‘u’:无符号整数
- ‘f’:浮点
- ‘c’:复数浮点
- ‘m’:时间间隔
- ‘M’:日期时间
- ‘O’:Python 对象
- ‘S’, ‘a’:字节串
- ‘U’:Unicode
- ‘V’:原始数据(void)
numpy的数组属性
这一目题将介绍numpy中与数组属性有关的部分函数
ndarry.shape
这一数组属性将返回数组的形状
例1
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a.shape)
#输出为(2,3)
即该数组2行3列
例2
利用ndarry.shape也可以强行改变数组的形状
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
a.shape=(3,2)
print(a)
'''
输出为
[[1 2]
[3 4]
[5 6]]
数组已经被强行由2行3列变为3行2列
'''
例3
利用ndarry.reshape函数也可以改变数组形状
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
b=a.reshape(3,2)
print(b)
'''
输出为
[[1 2]
[3 4]
[5 6]]
'''
例四
import numpy as np
a=np.arange(24)
b=a.reshape(2,4,3)
print(b)
输出为
'''
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[[12 13 14]
[15 16 17]
[18 19 20]
[21 22 23]]]
'''
ndarry.ndim
该数组属性返回数组的维度
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a.ndim)
#输出为2,因为这是个二维数组
numpy.itemsize
该数组属性返回数组中每个元素的字节单位长度
例一
import numpy as np
a=np.array([1,2,3,4,5],dtype=np.int8)
print(a.itemsize)
#输出为1(int8字节长为1)
例二
import numpy as np
a=np.array([1,2,3,4,5],dtype=np.float32)
print(a.itemsize)
#输出为4(float32字节长为4)
numpy.flags
ndarry对象有以下属性,ndarry.flags属性返回它们的当前值
- C_CONTIGUOUS © 数组位于单一的、C 风格的连续区段内
- F_CONTIGUOUS (F) 数组位于单一的、Fortran 风格的连续区段内
- OWNDATA (O) 数组的内存从其它对象处借用
- WRITEABLE (W) 数据区域可写入。 将它设置为flase会锁定数据,使其只读
- ALIGNED (A) 数据和任何元素会为硬件适当对齐
- UPDATEIFCOPY (U) 这个数组是另一数组的副本。当这个数组释放时,源数组会由这个数组中的元素更新
例
import numpy as np
a=np.array([1,2,3,4,5],dtype=np.float32)
print(a.flags)
'''
输出为
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
'''
第一课暂时就介绍到这里,本文会持续更新知道更新完。
吾心所向,即为远方