python中的numpy库

一、属性及其定义

import numpy as np    #载入模块
a = np.array([[1,2,3],[2,3,4]],dtype = np.float64) #用列表创建一个矩阵 (两行三列)
a1 = np.zeros((3,4))  #创建三行四列的零矩阵
a1 = np.ones((3,4))  #创建三行四列的1矩阵
a1 = np.empty((3,4))  #创建三行四列的接近零的矩阵

print(a)          #会输出矩阵形式的a
print(a.ndim)    #几行  2
print(a.shape)   #元组形式的 行数,列数 (2, 3)
print(a.size)    #一共多少元素 6

a1 = np.arange(10,20,2)  #元素范围是10到20左闭右开,步长为2
print(a1)                           #[10 12 14 16 18]
a2 = np.arange(12).reshape((3,4)) #一共是12个元素(0到11),然后再变为3行4列的矩阵
print(a2)                          #输出形式为矩阵形式
a3 = np.linspace(1,10,5)  #表示从1到10(左闭右闭),分成5段(从1开始每个都加(10-1)/(5-1),也可以加上.reshape,进一步使其变为几行几列的矩阵。
print(a3)            #[ 1.    3.25  5.5   7.75 10.  ]

生成随机三行四列矩阵:a1 = np.random.random((3,4))
生成随机符合正态分布的三行四列矩阵:a1 = np.random.randn(3,4)

二、运算

1. 元素的运算

import numpy as np    #载入模块
a = np.array([[1,2,3],[4,3,2]])
b = np.arange(6).reshape((2,3))
print(b<3)             #结果为布尔型的矩阵
c1 = a+b               #表示两个矩阵可以加减乘除,也可以开方,注意乘法时不是矩阵的乘法
b = np.arange(6).reshape((3,2))
c2 = np.dot(a,b)       #矩阵乘法或者形式为 c1 = a.dot(b)
d = np.sin(a)          #cos,tan也一样,对每个元素取sin值

print(np.sum(a))		#矩阵中 所有元素 求和
print(np.min(a)) 		#求矩阵 所有元素 中的最小值
print(np.max(a)) 		#求矩阵 所有元素 中的最大值
#当 axis = 0 时为求每列的
print(np.sum(a,axis=1))      #每行元素求和(输出形式为序列)
print(np.min(a,axis=1))      #求矩阵每行的最小值(输出形式为序列)
print(np.max(a,axis=1))      #求矩阵每行的最大值(输出形式为序列)

print(np.mean(a))	    #求所有元素的平均值(后面加上axis=0或=1区分列行(输出形式为序列))
print(np.median(a))     #求所有元素的中位数(后面加上axis=0或=1区分列行(输出形式为序列))
print(np.sort(a))       #输出升序排序之后的矩阵
print(np.transpose(a))  #矩阵的转置(输出形式为矩阵)或者 a.T

print(np.clip(a,5,9))   #矩阵中所有小于5的数都变为5,所有大于9的数都变为9,[5,9]之间的数不变
print(np.cumsum(a) )    #繁殖数(个数相同,输出形式为序列 )[ 1  3  6 10 13 15]
print(np.diff(a))       #每行后列元素减前列元素(结果为矩阵会比a少一列)
print(np.nonzero(a))    # 输出非0元素的索引(形式奇异)

2. 有关索引的运算

  1. 单个输出
import numpy as np    #载入模块
a = np.arange(3,15).reshape((3,4))
print(np.argmin(a))     #输出矩阵所有元素中最小值的索引 0
print(np.argmax(a))   #矩阵所有元素中最大值的索引 11
print(a[2,1])   #第三行第二列 12
print(a[:,1])    #第二列 [ 4  8 12]
print(a[1,:])    #第二行 [ 7  8  9 10]
print(a[1,1:3])  #第二行,第2列和第3列的值(输出形式为序列) [8 9]
  1. 循环输出
import numpy as np    #载入模块
a = np.arange(3,15).reshape((3,4))
for i in a:
    print(i)   #一行一行输出(序列形式),以换行隔开
for i in a.T:  #(or in np.transpose(a))
    print(i)   #一列一列输出(序列形式),以换行隔开
for i in a.flat:
    print(i)   #输出每个元素
print(a.flatten()) #可将矩阵a变为序列输出 [ 3  4  5  6  7  8  9 10 11 12 13 14]

三、合并(1表示行->左右延申)(0表示列->上下延申)

初始化

a = np.array([1,2,3])
b = np.array([10,20,30])

表示输出时变为行矩阵:print(a[np.newaxis,:]) #使得序列变为行矩阵, shape从(3,)变为(1,3)
表示输出时变为列矩阵:print(a[:,np.newaxis]) #使得序列变为列矩阵,shape从(3,)变为(3,1)

方法一

初始化:a = np.array([1,2,3]) 生成序列 [1 2 3]
初始化:b = np.array([10,20,30]) 生成序列 [10 20 30]
上下合并: print(np.vstack((a,b)))
左右合并: print(np.hstack((a,b)))
多个矩阵上下合并 : print(np.vstack((a,b,b,a)))
多个矩阵左右合并 : print(np.hstack((a,b,b,a)))

方法二

初始化时变为行矩阵:a = np.array([1,2,3])[np.newaxis,:] 生成矩阵 [ [1 2 3] ]
或者 a = np.array([1,2,3]).reshape(1,3)
初始化时变为列矩阵:a = np.array([1,2,3])[:,np.newaxis]
或者 a = np.array([1,2,3]).reshape(3,1)

#必须要求a,b初始化时为矩阵(不能为序列)。
print(np.concatenate((a,b,b,a),axis=0)) #表示上下合并
print(np.concatenate((a,b,b,a),axis=1)) #表示左右合并

四、分割(1表示行->行不变,列分割)

1.等量分割:

初始化

a = np.arange(12).reshape((3,4)) #初始化三行四列的矩阵

print(np.split(a,2,axis=1)) 表示对矩阵a实行列分割,分成2块
print(np.split(a,3,axis=0)) 表示对矩阵a实行行分割,分成3块
或者更为简化的分割函数如下:
print(np.hsplit(a,2)) 表示左右分开,分成两块,输出结果同上(列分割)
print(np.vsplit(a,3)) 表示上下分开,分成三块,输出结果同上(行分割)

2.不等量分割

print(np.array_split(a,3,axis=1))
结果如下:(列分割成了2,1,1的形式,分割的形式类似二分思想)

[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]

五、赋值(深浅拷贝问题)

在numpy里,普通赋值(如b = a),改变一个会影响另外一个,它们占用相同内存空间
b = a.copy()或者b = np.copy(a),会开辟新的内存空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值