NumPy创建Ndarray对象的一些方式

529 阅读6分钟

说明: numpy默认Ndarray所有元素的类型相同,如果列表中存在不同类型,会统一成同一类型,其优先级为:str>float>int

array()函数创建:

函数作用:创建Ndarray数组对象。

函数原型:numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)

参数描述
object数组或嵌套的数列
dtype可选参数,数组元素的数据类型
copy可选参数,对象是否需要复制
order创建数组的样式,包括行方向(C),列方向(F),任意方向(A,默认值),内存中存储元素的顺序
subok默认返回一个与基类类型一致的数组
ndmin指定生成数组的最小维度
# 一维数组
import numpy as np
arr = np.array([1,2,3])
print(arr)
print(type(arr))

'''
输出:
[1 2 3]
<class 'numpy.ndarray'>

arr输出内容看起来和Python中的列表一样,但是从输出type中可以知道其实是numpy.ndarray对象。
'''
# 默认元素类型相同
import numpy as np
arr = np.array([1,3,4,5,6.1])
print(arr) # 所有的int都会变成flot

'''
输出:
[1.  3.  4.  5.  6.1]
'''
# 多维数组
import numpy as np
arr = np.array([[1,3],[5,6]])
print(arr) 

'''
输出:
[[[1 3]
  [5 6]]]
'''
# 多维数组
import numpy as np
#规定最小维度。不设ndmin时,创建的就是一维数组
arrA = np.array([1,2,3,4,5,6],ndmin=2)
print(arrA) 

'''
输出一个元素的二维数组:
[[1 2 3 4 5 6]]
'''
# dtype参数,规定数组中元素的类型
import numpy as np
arr = np.array([1,2,3],dtype='f')
print(arr)
arr = np.array([1,2,3],dtype=np.float32)
print(arr)

'''
输出:
[1. 2. 3.]
[1. 2. 3.]
'''
import numpy as np
# 结构化数据类型,注意不要用成np.array,执行后会提示:data type not understood
employee = np.dtype([("name","S20"),("los","i4"),("performance","f4")]) 
arr = np.array([("sunck", 28, 99.999),("kaige", 18, 33.39)],dtype=employee)
arr
'''
输出:
array([(b'sunck', 28, 99.999), (b'kaige', 18, 33.39 )],
      dtype=[('name', 'S20'), ('los', '<i4'), ('performance', '<f4')])
'''

asarray()函数创建:

作用:和numpy.array函数类似,但比numpy.array少几个参数。

函数原型:numpy.asarray(a, dtype=None, order=None)

参数描述
a任意形式输入参数,列表、列表的元组、元组、多维数组等
dtype可选参数,数据类型
order创建数组的样式,包括行方向(C),列方向(F),内存中存储元素的顺序
import numpy as np
arr = np.asarray([1,2,3]) # 列表
arr = np.asarray((1,2,3)) # 元组
arr = np.asarray([(1,2),(3,4,5)]) # 列表多元组
arr = np.asarray([1,2,3],dtype='f')
# arr 可输出对比

empty()函数创建:

作用:创建一个指定数据类型(dtype)、形状(shape)且未初始化的数组

原型:empty(shape, dtype=float, order='C')

参数描述
shape数组形状
dtype数据类型,可选
order创建数组的样式,包括行方向(C),列方向(F),内存中存储元素的顺序
import numpy as np
arr = numpy.empty([2,2],dtype=int)# 两行两列
print(arr) # 每次执行输出的值可能很小或很大,系统不同得到的值不一样。未初始化的值未必是0
'''
输出:

[[-9223372036579159060           4409867976]
 [          4396684576 -9223372036579159035]]

'''

zeros()函数创建:

作用:创建指定大小的数组,创建后数组元素默认是0。

原型:同empty

import numpy as np
arr = np.zeros([2,3],dtype=int)

# 结构化数据类型
arr = numpy.zeros([2,3,3],dtype=[('x','i4'),('y','f'),('z','S')])

ones()函数创建:

作用:和numpy.zeros类似,但ones函数使用1来填错初始值。

full()函数创建:

作用:创建指定形状的数组,数组元素用参数fill_value来填充。

原型:

参数描述
shape数组形状
fill_value填充数据
dtype数据类型
order'C'用于C的行数组,'F'用于FORTRAN的列数组
import numpy as np
arr = numpy.full([2,2],fill_value=32,dtype=int)

eye()函数创建:

作用:对角线元素值为1,其他元素为0

原型:numpy.eye(N, M=None, k=0, dtype=<class 'float'>, order='C')

参数描述
N指定行数
M指定列数,默认和行数相等
k对角元素的索引,如k=1,指定第二个元素画为对角线。
dytpe数据类型
order'C'用于C的行数组,'F'用于FORTRAN的列数组
import numpy as np
arr = numpy.eye(5,dtype=int)

arange()函数创建:

作用:根据start和stop指定数值范围,通过step步长,创建一个ndarray对象。

参数描述
start起始值,默认为0
stop终止值(不包含)
step步长,默认为1
dtype返回ndarray的数据类型,如没有指定,则默认使用输入的数据类型
import numpy as np
arr = numpy.arange(1,6,2)

frombuffer()函数创建:

作用:用于实现动态数组,接受buffer输入参数,以流的形式读入转化成ndarray对象,需要注意是:buffer为str时,Python3默认str是Unicode类型,需要在str前加b,转成bytestring。

函数原型:frombuffer(buffer, dtype=float, count=-1, offset=0)

参数描述
buffer可以是任意对象,会以流的形式读入,注意str类型转换
dtype返回数组的数类型,可选
count读取的数据量,默认读取所有数据(-1)
offset读取的起始位置,默认为0,指定时需注意与count、buffer长度之间的关系
import numpy as np
test = b"debug me"
arr = numpy.frombuffer(test,dtype='S1',count=5,offset=2)#str类型,每个长度为1。

fromiter()函数创建:

作用:从迭代对象中建立ndarray对象,返回一维数组。

函数原型:fromiter(iterable, dtype, count=-1)

参数描述
iterable可迭代对象
dtype返回数组的数据类型,可选
count读取的数据量,默认读取所有数据(-1)
import numpy as np
lst = [1,2,3]
lst1 = iter(lst)
print(type(lst1),lst1)
arr = np.fromiter(lst1,dtype='f')#一定要指定dtype,因为dtype没有默认值

linspace()函数创建:

作用:创建一个由等差数列构成的一维数组。

函数原型:numpy.np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

参数描述
start序列的起始值
stop序列的终止值,当endpoint==True时,该值包含在数列中
num要生成的等步长的样本数量,默认为50
endpoint默认为True,为True时,stop参数值包含在数列中
retstep默认为False,为False时,生成的数组中不会显示间距
dtype返回数组的数据类型,可选
import numpy as np
arr = np.linspace(1,10,10,dtype='i4')

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,为True时,stop参数值包含在数列中
base对数log的底数,默认为10
dtype返回数组的数据类型,可选
import numpy as np
arr = np.logspace(1,10,10,dtype='f',base=2)

random.rand()函数创建

作用:生成[0,1)之间的随机数

函数原型:rand(d0, d1, ..., dn)

# 一维数组
import numpy as np
arr = np.random.rand()
print(arr)
arr = np.random.rand(3)
print(type(arr),arr)

# 二维数组
arr = np.random.rand(2,3)

# 三维数组:3个元素、3行、2列。
arr = np.random.rand(3,3,2)

random.random()函数创建:

作用:生成[0,1)之间的随机数,只能传一个参数。

函数原型:random(size=None)

参数描述
size元素个数
import numpy as np
arr = np.random.random()
print(arr)
arr = np.random.random(3)
print(type(arr),arr)

# 这行代码会报错,random只能传一个参数
#arr = np.random.random(2,3) 

random.randint()函数创建:

作用:生成随机数

函数原型:randint(low, high=None, size=None, dtype='l')

参数描述
low包含的下限
ligh不包含的上限
size元素个数
dtype元素类型
import numpy as np
arr = np.random.randint(1,9,5)

random.randn()函数创建:

作用:返回一个或一组样本,具有标准正态分布。

标准正态分布:又称u分布,是以0为均值,以1为标准差的正太分布,记为:N(0,1)

函数原型:rand(d0, d1, ..., dn)

import numpy as np
arr = np.random.randn()
print(arr)

arr = np.random.randn(2)
print(arr)

arr = np.random.randn(2,3)
print(arr)

arr = np.random.randn(2,3,2)
print(arr)

random.normal()函数创建:

作用:生成高斯分布的概率密度随机数

函数原型:normal(loc=0.0, scale=1.0, size=None)

参数描述
loc浮点型,此概率分布的均值(对应着整个分布的中心center)
scale浮点型,此概率分布的标准差(对应着分布的宽度,scale越大越矮胖,scale越小,越高瘦)
size输出的shape,默认为None,只输出一个值
import numpy as np
# 可以自行调整loc,scale值,观察规律
arr = np.random.normal(loc=1,scale=2,size=8)

能够创建Ndarray对象的方法,这些函数无所谓常不常用,根据实际应用场景选择,学习笔记,仅供参考。如有错误之处,还望各路大佬指出,hhh~。