Numpy库的ndarray对象
内容目录
一、numpy的ndarray对象
numpy最重要的一个特点是其
维数组对象ndarray,它是一个一系列同类型数据的集合,以0下标开始进行集合中元素的索引
创建一个ndarray只需要调用Numpy的array函数即可:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数说明:
参数 | 说明 |
---|---|
object | 数组或者嵌套的数列 |
dtype | 数组元素的类型 |
copy | 对象是否需要复制,可选 |
order | 创建数组样式,C为行方向,F为列方向,A为任意方向 |
subok | 默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
测试:
a = np.array([1,2,3,4]) #一维
b = np.array([[1,2],[3,4],[5,6]]) # 二维
print(a)
print(b)
输出:
[1 2 3 4]
[[1 2]
[3 4]
[5 6]]
关于参数ndmin
# 参数ndmin
a1 = np.array([1,2,3], ndmin=1)
a2 = np.array([1,2,3], ndmin=2)
a3 = np.array([1,2,3], ndmin=3)
print(a1)
print(a2)
print(a3)
结果:
[1 2 3]
[[1 2 3]]
[[[1 2 3]]]
二、Numpy创建数组
1.调用numpy.empty(shape, dtype, order)方法
注意:order有两个值,C和F分别代表行优先和列优先
numpy.empty([3,2], dtype = int)
# 方式1:numpy.empty()
a4 = np.empty([3,2], dtype = int) #[3,2]代表三行两列,即是有三个元素的二维数组
print(a4)
结果:并未进行初始化,随机输出的数值
[[ 28090704 0]
[ 27547584 140697935844848]
[140697954999808 140697982180144]]
2.numpy.zeros()
创建方式和empty()一样,知识创建指定大小数组后的元素用0填充
# 方式2:numpy.zeros()
a5 = np.zeros([3,2], dtype = int)
print(a5)
结果:
[[0 0]
[0 0]
[0 0]]
3.numpy.ones()
# 方式3:numpy.ones()
a6 = np.ones([3,2], dtype=int)
print(a6)
结果:
[[1 1]
[1 1]
[1 1]]
4.numpy.asarray(),从已有的数组创建
# 方式4:numpy.asarray(),从已有的数组创建
array = [1,2,3]
a7 = np.asarray(array, dtype=float)
print(a7)
结果:
[ 1. 2. 3.]
5.numpy.frombuffer:用于动态数组实现
# 方式5:numpy.frombuffer:用于动态数组实现
# 参数说明:count--》每次读取的个数,-1代表全部数据,offset--》开始索引
a8 = np.frombuffer(b"hello world", dtype='S1', count=1, offset=0)
print(a8)
结果:
[b'h']
6.numpy.fromiter:从迭代器中建立
# 方式6:numpy.fromiter:从迭代器中建立
it = iter(array)
a9 = np.fromiter(it, dtype=float, count=-1)
print(a9)
结果:
[ 1. 2. 3.]
7.numpy.arange()
# 方式7:numpy.arange()
a0 = np.arange(10,20,2)
print(a0)
结果:
[10 12 14 16 18]
三、Numpy切片和索引
举个栗子
s = slice(2,7,2) #[2 4 6]
b1 = np.arange(10) #[0 1 2 3 4 5 6 7 8 9]
print(b1[s]) # [2 4 6]
b1[s]:这种写法类似于b1为待切片的数组,s为切片的索引,按照s的索引去取出b1的数值
1.冒号的使用’:’
# :的使用
print(b1[1:])
print(b1[1:2])
print(b1[:3])
结果:
[1 2 3 4 5 6 7 8 9]
[1]
[0 1 2]
冒号类似于数组的切片操作
思考:如果是二维或者三维数组呢?
2.多维数组中冒号的使用
# 多维数组冒号:的使用
b2 = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(b2[1:])
print(b2[1:2])
print(b2[:2])
# 结果
[[4 5 6]
[7 8 9]]
[[4 5 6]]
[[1 2 3]
[4 5 6]]
在多维数组中,是一样的道理,将最外层的按切片拿出
3.省略号的使用…
思考:上面使用:切片可以拿出外层的数据,如果对于一个二维数据,想要拿出内部数据怎么办
比如:b2 = [[1,2,3], [4,5,6],[7,8,9]],想要拿出[8,9]
print(b2[2][1:])
# 结果
[8,9]
如果想要拿出[2,3],[5,6],[8,9]呢
使用上面的切片:能不能实现呢
print(b2[:,1:])
#结果
[[2 3]
[5 6]
[8 9]]
除此之外,还可以使用省略[6 7 8 9]号…
如果对于行来说需要所有的行,就可以使用省略号…代替" : "
print(b2[...,1:])
#结果
[[2 3]
[5 6]
[8 9]]
同样,如果只想要第二行的数据,就可以在列上使用省略号
print(b2[1,...])
# 结果
[4 5 6]
4.整数数组索引
print(b[[0,1,2],[0,1,0]])
结果:
[1 5 7]
整数数组索引是将同样位置的索引组合起来去切分,比如对于b2 = [[1,2,3], [4,5,6],[7,8,9]],按照整数索引[[0,1,2],[0,1,0]]切分,就是把b2的[[0,0],[1,1],[2,0]]的数值取出来
5.布尔索引
# 布尔索引
print(b2[b2>5])
# 结果
[6 7 8 9]
将b2>5的数值筛选出来