1.什么是numpy
numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
2.numpy创建数组
2.1 ndarray
numpy中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。
2.2ndarray属性:
ndim属性:表示维度个数
shape属性:表示各维度大小
dtype属性:表示数据类型
ndarray中的每个元素是数据类型对象的对象(称为dtype)。
2.3创建ndarray数组函数
import numpy as np
#生成一维数组
a=np.array([1,2,3])
print(a) #打印数组
print(a.dtype) #打印数组类型
输出:
[1 2 3]
int32
#创建二维数组
a2=np.array([[1,2],[3,4]])
print(a2) #打印数组
print(a2.ndim) #打印数组的维度
print(a2.shape) #打印数组各个维度的长度。shape是一个元组
输出:
[[1 2]
[3 4]]
2
(2, 2)
a3=np.zeros(6) #创建一维长度为6的,元素都是0的一维数组
print(a3)
a4=np.zeros((2,3)) #创建一维长度为2,二维长度为3的二维0数组
print(a4)
a5=np.ones((2,3)) #创建一维长度为2,二维长度为3的二维1数组
print(a5)
a6=np.empty((2,3)) #创建一维长度为2,二维长度为3,未初始化的二维数组
print(a6)
输出:
[0. 0. 0. 0. 0. 0.]
[[0. 0. 0.]
[0. 0. 0.]]
[[1. 1. 1.]
[1. 1. 1.]]
[[1. 1. 1.]
[1. 1. 1.]]
#使用arrange生成连续元素
a7=np.arange(6)
print(a7)
a8=np.arange(0,6,2)
print(a8)
输出:
[0 1 2 3 4 5]
[0 2 4]
3.numpy数据类型
NumPy 数字类型是dtype(数据类型)对象的实例,每个对象具有唯一的特征。 这些类型可以是np.bool_,np.float32等。
数据类型及描述
- 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 位浮点表示(实部和虚部)
# 使用数组标量类型
import numpy as np
dt = np.dtype(np.int32)
print(dt)
输出:int32
#int8,int16,int32,int64 可替换为等价的字符串 'i1','i2','i4',以及其他。
import numpy as np
dt = np.dtype('i4')
print(dt)
输出:int32
#使用astype复制数组,并转换类型
x=np.array([1,2,3],dtype=np.float64)
y=x.astype(np.int32)
print(x)
print(y)
输出:
[1. 2. 3.]
[1 2 3]
#将字符串元素转换为数组元素
x=np.array(['1','2','3'],dtype=np.string_)
y=x.astype(np.int32)
print(x)
print(y)
输出:
[b’1’ b’2’ b’3’]
[1 2 3]
4.切片和索引
ndarray对象中的元素遵循基于零的索引。 有三种可用的索引方法类型: 字段访问,基本切片和高级索引。
基本切片是 Python 中基本切片概念到 n 维的扩展。 通过将start,stop和step参数提供给内置的slice函数来构造一个 Python slice对象。 此slice对象被传递给数组来提取数组的一部分。
4.1基本切片
import numpy as np
a = np.arange(10)
s = slice(2,7,2) #由冒号分隔的切片参数(start:stop:step)直接提供给ndarray对象,也可以获得相同的结果。
print(a[s])
输出:[2 4 6]
# 对单个元素进行切片
import numpy as np
a = np.arange(10)
b = a[5] #只输入一个参数
print(b)
输出:5
上述也适用于多维ndarray
“…”使选择的长度与数组的维度相同;
如果在行位置使用省略号,它将返回包含行中元素的ndarray。
# 最开始的数组
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print('我们的数组是:')
print(a)
print('\n')
# 这会返回第二列元素的数组:
print('第二列的元素是:')
print(a[...,1])
print('\n')
# 现在我们从第二行切片所有元素:
print('第二行的元素是:')
print(a[1,...])
print('\n')
# 现在我们从第二列向后切片所有元素:
print('第二列及其剩余元素是:')
print(a[...,1:])
输出:
我们的数组是:
[[1 2 3]
[3 4 5]
[4 5 6]]
第二列的元素是:
[2 4 5]
第二行的元素是:
[3 4 5]
第二列及其剩余元素是:
[[2 3]
[4 5]
[5 6]]
x=np.array([[1,2],[3,4],[5,6]])
print(x[:2,:1])
print("*********")
x[:2,