Python中的Numpy库

Numpy:科学计算库,提供矩阵运算的功能

        Numpy数组是一个多维数组对象,称为ndarray。数组的下表是从0开始的,同一个Numpy数组中所有的元素类型必须是相同的。

        np.array方法可以将tuple、list、array或者其他序列模式的数据都统一创建为ndarray,默认创建一个新的ndarray。

a = np.array([(1,2,3),(1.5,1.6,3)])
print(a)
# 输出:
# [[1.  2.  3. ]
#  [1.5 1.6 3. ]]

        在上面这个输出当中,可以看到它把列表中的第一个元组和第二个元组中的数字都进行了浮点型转换。不管是大元组中有两个小元组,还是大元组中有一个小元组和小列表,所有类型的数据,在经过 转换后,都会变为列表类型的,也可以通过'dtype'来指定数组中元素的类型。

b = np.array([(1,2,3),(1.5,1.6,3)],dtype=complex)  # 给每个元素都加0.j
print(b)
# 输出:
# [[1. +0.j 2. +0.j 3. +0.j]
#  [1.5+0.j 1.6+0.j 3. +0.j]]

一、常见的方法

np.arange(最小值,最大值,步长)(左闭右开) : 创建等差数列
np.linspace(最小值,最大值,元素数量)
np.logspace(开始值, 终值, 元素个数)  : 创建等比数列

c = np.arange(15)
print(c)    # [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

d = np.arange(30).reshape(3,10)
# arange是数据范围,reshape是显示打印的时候呈现几行几列,例如上面这个就是3行10列,
# reshape中两个数的乘积必须是arange中的总数之和,不然报错
print(d)
# 输出:
# [[ 0  1  2  3  4]
#  [ 5  6  7  8  9]
#  [10 11 12 13 14]]

e = np.arange(0,2,0.5)
print(e)    # [0.  0.5 1.  1.5]

f = np.linspace(1,3,9)
print(f)    # [1.   1.25 1.5  1.75 2.   2.25 2.5  2.75 3.  ]

二、生成特殊数组

np.ones((2,3,5),dtype=int): 创建元素全为1的数组,参数表示(一共生成2个数组,每个数组3行,5列)
np.zeros: 创建元素全为 0 的数组, 类似 np.ones
np.empty创建一个内容随机并且依赖与内存状态的数组。
np.eye: 创建一个对角线为 1 其他为 0 的矩阵.
np.identity: 创建一个主对角线为 1 其他为 0 的方阵。

三、获取数组的属性

i = np.zeros((2,3,2))   # 这是一个三维数组,第一个数代表z轴,第二个数代表x轴(行),第三个数代表y轴(列)
print(i.ndim)    # 通过ndim去拿数组的维度属性。 输出:3
print(i.shape)   # 通过shape去拿数组的x,y,z的大小。输出:(2, 3, 2)
print(i.size)    # 通过size去取数组的所有元素的总个数。输出:12
print(i.dtype)   # 通过dtype去取数组中的元素是什么类型。输出:float64
print(i.itemsize)   # 通过itemsize去取每个元素占了几个字节(bit)。输出:8

四、合并数组

a = np.ones((2,2))
b = np.ones((2,2))
d = np.vstack((a,b))  # 垂直合并
e = np.hstack((b,a))  # 水平合并
print(d)
print(e)

五、数据储存和读取

1.save储存,load读取,默认保存为npy格式

import numpy as np
# 1.储存单个的数组
a = np.zeros((2,2,2))
# save是保存,第一个参数代表文件名(或者保存的路径加文件名),第二个参数是给数组赋的变量,默认保存为npy格式的,保存的是二进制文件
np.save('test1',a)
# 通过load读取
b = np.load('test1.npy')
# print(b)

2.储存多个文件,savez储存,load读取,默认保存为npz格式

c = np.zeros((3,3,3))
d = np.ones((5,5,5))
# 第一个参数为文件名,后面跟着几个数组的名字
np.savez('more',a,c,sss=d)
# 用load读取,读取时,如果没有特殊指定各个数组名称,默认从 arr_0 开始存储的,取名的时候,记得把名字放在前面,例如 sss=d
e = np.load('more.npz')
# print(e['arr_0'])
# print(e['arr_1'])
# print(e['sss'])

3.保存为txt类型的文件,只能保存一维和二维数组,要注意保存格式和取出格式中的delimiter,%f是将数据保存为浮点型

语法:np.loadtxt(FILENAME, dtype=int, delimiter=' ')
           np.savetxt("a.txt", a, fmt="%d", delimiter=",")

x = np.arange(0,10).reshape(2,-1)
np.savetxt('x.txt',x) # 不加其他参数的话,默认保存为 '%.18e' 格式来保存数据,并且已逗号进行分隔
f = np.loadtxt('x.txt')
# print(f)

y = np.arange(0,10,0.5).reshape(4,-1)
np.savetxt('y.txt',y,fmt='%d',delimiter=',')  # 保存为整数,以逗号分隔开
g = np.loadtxt('y.txt',delimiter=',')
# print(g)

六、常用得方法收集

1. numpy.exp():返回e的幂次方,e是一个常数为2.71828,括号里的数代表e的次方
2. numpy.flip() 反向矩阵,如下示例
               

a = np.arange(30).reshape(3,10)
print(np.flip(a,axis=0))

3. np.power(x,y) 计算x的y次方
4. np.sqrt(x)    计算x的平方根
5. np.arcsin(x)

print('1的反正弦值:{}'.format(np.arcsin(1)))      # pi/2
print('-1的反正弦值:{}'.format(np.arcsin(-1)))    # -pi/2
print('0的反正弦值:{}'.format(np.arcsin(0)))

6. np.geterr

np.greater(arr1, arr2) > 判断 arr1 的元素是否大于 arr2 的
np.greater_equal(arr1, arr2) >= 判断 arr1 的元素是否大于等于 arr2 的
np.less(arr1, arr2) < 判断 arr1 的元素是否小于 arr2 的
np.less_equal(arr1, arr2) <= 判断 arr1 的元素是否小于等于 arr2 的
np.equal(arr1, arr2) == 判断 arr1 的元素是否等于 arr2 的
np.not_equal(arr1, arr2) != 判断 arr1 的元素是否不等于 arr2 的

 七、zip函数

        zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,
        然后返回由这些元组组成的对象(python2 返回的是这些元组组成的列表 ),这样做的好处是节约了不少的内存。

a = [1, 2, 3]
b = [4, 5, 6]

a_b = zip(a, b)
print(a_b)    # <zip object at 0x000002AE6C79E900>
print(list(a_b))    # [(1, 4), (2, 5), (3, 6)]

# 解压 zip(*iterables)
a_b = zip(a, b)
a_2, b_2 = zip(*a_b)
print(a_2)    # (1, 2, 3)
print(b_2)    # (4, 5, 6)

# *zip( )
# *zip()函数是zip()函数的逆过程,将zip对象变成原先组合前的数据。
print(*zip(a, b))    # (1, 4) (2, 5) (3, 6)

八、map函数

        python中的map函数是python中的内置函数,map函数会根据提供的函数对指定序列做映射,map函数的第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表:其实就是对可迭代的对象中的每一个元素调用function函数并将函数处理的结果转为列表返回。
        在蓝桥杯的杯赛中经常要使用这个函数对输入的数据转换为int类型的数据:a,b = map(int, input().split())

九、矩阵转置

a = np.arange(30).reshape(3,10)
print(a)
b = list(map(list,zip(*a)))    # 主要是这一句
print(b)

十、矩阵维度交换

transpose函数将矩阵进行转置(可以用于多维度的维度交换,如:

np.transpose(a,[1,2,0])

将a的维度由(3,1024,512)变为(1024,512,3)).

同样可以用于多维度维度交换的还有:swapaxes(),如:

a.swapaxes(0,1)

其实就是把矩阵中0,1两个轴对换一下维度由(3,1024,512)变为(1024,3,512)

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>