1、numpy数据类型
数据结构
numpy支持的数据类型比Python内置的类型要多很多,基本上可以和C语言的数据类型对应上,其中部分类型对应为Python内置的类型。
numpy的数值类型实际上是dtype对象的实例,并对应唯一的字符。
名称 | 描述 |
---|---|
bool_ | 布尔型数据类型(True 或者 False) |
int_ | 默认的整数类型(类似于 C 语言中的 long,int32 或 int64) |
intc | 与 C 的 int 类型一样,一般是 int32 或 int 64 |
intp | 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64) |
int8 | 字节(-128 to 127) |
int16 | 整数(-32768 to 32767) |
int32 | 整数(-2147483648 to 2147483647) |
int64 | 整数(-9223372036854775808 to 9223372036854775807) |
uint8 | 无符号整数(0 to 255) |
uint16 | 无符号整数(0 to 65535) |
uint32 | 无符号整数(0 to 4294967295) |
uint64 | 无符号整数(0 to 18446744073709551615) |
float_ | float64 类型的简写 |
float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位 |
float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位 |
float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位 |
complex_ | complex128 类型的简写,即 128 位复数 |
complex64 | 复数,表示双 32 位浮点数(实数部分和虚数部分) |
complex128 | 复数,表示双 64 位浮点数(实数部分和虚数部分) |
数据类型对象(dtype)
数据类型对象(numpy dtype类的实例)用来描述与数组对应的内存区域是如何使用,它描述了数据的以下几个方面:
-
数据的类型(整数,浮点数或者Python对象)
-
数据的大小
-
数据字节顺序(小端法或大端法)【小端法:最小值存储在最小的地址,即低位组放在最前面;大端法:最重要的字节存储在最小的地址,即高位组放在最前面】
-
在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分
-
如果数据类型是子数组,那么它的形状和数据类型是什么
每个内建类型都有一个唯一定义它的字符代码
字符 | 对应类型 |
---|---|
b | 布尔型 |
i | (有符号) 整型 |
u | 无符号整型 integer |
f | 浮点型 |
c | 复数浮点型 |
m | timedelta(时间间隔) |
M | datetime(日期时间) |
O | (Python) 对象 |
S, a | (byte-)字符串 |
U | Unicode |
V | 原始数据 (void) |
实例8:类似于C语言中的结构体,提前创建一个所需的数据类型
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)
2、创建Ndarray数组对象
说明
numpy默认ndarray的所有元素的类型是相同的,这一点与Python中的list不同
如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
array()函数
list1 = ['小猪小猪了了了', '小狗小狗汪汪汪', '小羊小羊嘛嘛嘛', '青蛙青蛙呱呱叫']
# array()
print('array()')
arr1 = np.array(list1)
print(arr1)
print(type(list1)) # <class 'list'>
print(type(arr1)) # <class 'numpy.ndarray'>
asarray()函数
原型:numpy.asarray(a,dtype=None,order=None)
作用:类似于numpy.array
empty()函数
原型:numpy.empty(shape,dtype=float,order=‘C’)
作用:创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组;初始数据随机
参数 | 描述 |
---|---|
shape | 数组形状 |
dtype | 数据类型,可选 |
order | 有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。 |
import numpy as np
x = np.empty([3,2], dtype = int)
print (x)
zeros()函数
原型:numpy.zeros(shape,dtype=float,order=‘C’)
作用:创建指定大小的数组,数组元素以0来填充
ones()函数
原型:numpy.ones(shape,dtype=None,order=‘C’)
作用:指定形状的数组,数组元素以1来填充
full()函数
原型:numpy.full(shape,fill_value,dtype=None,order=‘C’)
作用:创建指定形状的数组,数组元素以fill_value来填充
import numpy as np
arr = np.full(5,fill_value=1024)
print(arr)
[1024 1024 1024 1024 1024]
eye()函数
原型:numpy.eye(N,M=None,k=0,dtype=float,order=‘C’)
作用:对角线为1,其他的位置为0
参数 | 说明 |
---|---|
N | 行数量 |
M | 列数量,默认等于行数量,可选 |
dtype | 数据类型,可选 |
order | 'C’用于C的行数组,或者’F‘用于FORTRAN的列数组 |
arange()函数
原型:numpy.arange(start,stop,step,dtype)
作用:创建数值范围并返回ndarray对象,根据start与stop指定的范围以及step设定的步长,生成一个ndarray。
import numpy as np
# arange()
print('arange()')
arr2 = np.arange(1, 100, 2)
print(arr2)
print(type(arr2))
frombuffer()函数
原型:numpy.frombuffer(buffer,dtype=float,count=-1,offset=0)
作用:用于实现动态数组,接受buffer输入参数,以流的形式读入转化成ndarray对象
注意:buffer是字符串的时候,Python3默认str是Unicode类型,所以要转成bytestring在原str前加上b
参数 | 说明 |
---|---|
buffer | 可以是任意对象,会以流的形式读入 |
dtype | 返回数组的数据类型,可选 |
count | 读取的数据数量,默认为-1,读取所有数据 |
import numpy as np
x = b'sunck is a good man'
arr = np.frombuffer(x,dtype='S1')
print(arr)
fromiter()函数
原型:numpy.fromiter(iterable,dtype,count=-1)
作用:从可迭代对象中建立ndarray对象,返回一维数组
import numpy as np
x = [1,2,3,4,5]
z = iter(x)
arr = np.fromiter(z,dtype='f')
print(arr)
logspace()函数
原型:numpy.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)
作用:创建一个于等比数列
参数 | 说明 |
---|---|
start | 序列的起始值为:base**start |
stop | 序列的终止值为:base**stop.如果endpoint为true,该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为50 |
endpoint | 该值为true时,数列中中包含stop值,反之不包含,默认是True |
base | 对数log的底数,默认是10 |
dtype | ndarray的数据类型 |
import numpy as np
arr = np.logspace(1.0, 2.0, 10)
print(arr)
[ 10. 12.91549665 16.68100537 21.5443469 27.82559402
35.93813664 46.41588834 59.94842503 77.42636827 100. ]
linspace()函数
原型:numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
作用:创建一维数组的等差数列构成。
参数 | 描述 |
---|---|
start | 序列的起始值 |
stop | 序列的终止值,如果endpoint为true,该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为50 |
endpoint | 该值为true时,数列中包含stop值,反之不包含,默认是True |
restep | 如果为True时,生成的数组中会显示间距,反之不显示。 |
dtype | ndarray的数据类型 |
random.rand()函数
作用:rand()函数是随机创建[0,1)的几个随机数
import numpy as np
rand1 = np.random.rand(5)
print(rand1)
rand2 = np.random.rand(3, 4)
print(rand2)
[0.49182049 0.55494283 0.64066511 0.24876895 0.66749408]
[[0.5511636 0.26634502 0.92861776 0.99586307]
[0.18416113 0.6249501 0.30918162 0.67845577]
[0.07673799 0.88851927 0.54545835 0.41263138]]
random.random()函数
原型:random(size=None)
作用:生成[0,1)之间的随机数
random.randint()函数
原型:randint(low,high=None,size=None,dtype=‘1’)
作用:生成随机数
参数 | 说明 |
---|---|
low | 包含的下限 |
high | 不包含的上限 |
size | 元素个数 |
dtype | 元素类型 |
import numpy as np
print("# randint()函数是指定范围的整数随机函数")
randint1 = np.random.randint(1, 5, 10)
print(randint1)
randint2 = np.random.randint(1, 5, (2, 5))
print(randint2)
random.randn()函数
原型:randn(d0,d1,…,dn)
作用:返回一个或一组样本,具有标准正态分布,N(0,1)
import numpy as np
print("# randn()函数是N(0,1)的标准正态分布的随机函数")
randn1 = np.random.randn(5)
print(randn1)
randn2 = np.random.randn(3, 4)
print(randn2)
randn()函数是N(0,1)的标准正态分布的随机函数
[-0.68378205 0.49604937 -0.38792573 0.23037595 1.29181071]
[[-1.11512 1.1876267 -0.67914036 -0.22597874]
[ 1.3300902 0.19336917 0.02158708 -1.2945824 ]
[ 0.01044411 0.07133812 -1.35733938 -0.41487295]]
random.normal()函数
原型:normal(loc=0.0,scale=1.0,size=None)
作用:生成高斯分布的概率密度随机数
参数 | 说明 |
---|---|
loc | 浮点型,此概率分布的均值(对应着整个分布的中心centre) |
scale | 浮点型,此概率分布的标准差(对应分布的宽度,scale越大越矮胖,scale越小越瘦高) |
size | 输出的shape,默认为None,只输出一个值 |
4、Ndarray数组属性
Numpy数组的维度称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。
在Numpy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是Numpy中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维度
很多时候可以声明axis。axis=0,表示沿着第0轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。
常用属性
属性 | 说明 |
---|---|
ndim | 秩,即轴的数量或维度的数量 |
shape | 数组的维度,对于矩阵,n行m列 |
size | 数组元素的总个数,相当于.shape中n*m的值 |
dtype | ndarray对象的元素类型 |
itemsize | ndarray对象中的每个元素的大小,以字节为单位 |
flags | ndarray对象的内存信息 |
real | ndarray元素的实部 |
imag | ndarray元素的虚部 |
data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性 |
------ 以上内容均为学习笔记仅供参考,如有不准确或错误内容,望您批评指教。