六. numpy数据矩阵

numpy 数据(矩阵模块)

种开源的数值计算扩展库.这种库可用来存储和处理大型矩阵,比python自身的嵌套列表结构要高效的多(该结构也可以用来表示矩
https://www.runoob.com/numpy/numpy-tutorial.html
比较一下 nu.array 和 list 的区别
np.array是多维的,list是一维的
list对一维数组做一些操作,numpy其实就是对多维做操作
.计算速度快,甚至优于python内置的简单运算,使其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似
矩阵即numpy的np.array对象,创建矩阵就是把==列表==传入np.array()
import numpy as nu  # 数据矩阵
# 一维矩阵
arr1 = nu.array([1, 2, 3])
print(arr1)
# [1 2 3]
# 只有一行
# 相当于一条直线
print("************************二维对象**********************************")
#二维对象
arr2 = nu.array([[1, 2, 3], [4,5,6]])
print(arr2)

# 有行有列
# 相当于一个面,里面有多条线,一个列表里装了多个一维
# 二维数组(用的最多的)
print("************************创建三维的ndarray对象**********************************")
#创建三维的ndarray对象
arr3 = nu.array([[[1, 2, 3],
                  [3,2,1]],
                  [[4,5,6],
                  [6,5,4]]])
print(arr3)
print("***********************shape(查看ndarray对象的形式)***********************************")
# shape(查看ndarray对象的形式)
arr4=nu.array( [[1, 2, 3, 4],
               [5, 6, 7, 8],
               [5, 6, 7, 8]])
print(arr4)
# [[1 2 3 4]
#  [5 6 7 8]
#  [5 6 7 8]]
cc=arr4.shape    #获得多维数组的行和列,以元组形式表现出来
print(cc)       # (3, 4)   # (矩阵的行数,矩阵的列数)

print(arr4.shape[0])    # 获取行  3
print(arr4.shape[1])   # 获取列   4
print("**************************切分工具********************************")
# 2.切分工具
arr5=nu.array([ [1, 2, 3, 4],
                [5, 44, 88, 8],
                [5, 6, 7, 8]])
print(arr5[2,3])  #  行和列索引都从0开始,取第2行第3列               # 8

print(arr5[0,:])  #第一行,第1,2,3,4列的数
# [1 2 3 4]

print(arr5[:,0]) #所有行,第1列的数
# [1 5 5]

print(arr5[0:])   # 没有逗号的时候取出了全部
# [[1 2 3 4]
#  [5 6 7 8]
#  [5 6 7 8]]

print(arr5[1,1:3]) #取第二行第第二个和第三个
# [44 88]

print(arr5[arr5>3])#取大于3的值
# [ 4  5 44 88  8  5  6  7  8]

#取第第一列大于3的值
arr_lien = arr5[:,0]
print(arr_lien[arr_lien>3])   # [5 5]


# 有一个多维数组存储的是人的年龄,表格里有200岁以上的年龄
arr6 = nu.array([ [1000,2,300,4],[5,600,7,8],[5,6,700,8]])
# arr>200
"""array([[ True, False,  True, False],
       [False,  True, False, False],
       [False, False,  True, False]])"""

print(arr6[arr6>200])      # [1000  300  600  700]
print("**************************多维数组的元素的替换********************************")
# 多维数组的元素的替换

arr7=nu.array([ [1, 2, 3, 4],
                [5, 44, 88, 8],
                [5, 6, 7, 8]])

cc=arr7[1,2]=666
print(arr7)

#数组中大于30的数替换成了99
bb=arr7[arr7>30]=99
print(bb)
print(arr7)

# 所有行,第1列的数  修改成11
dd=arr7[:,0]=11
print(dd)
print(arr7)
print("**************************多维数组的合并********************************")
# 多维数组的合并
arre = nu.array([[1, 2, 3],[4,5,6]])
arrr = nu.array([[3, 2, 4],[5,3,7]])
#vertical 垂直新的

l=nu.vstack((arre,arrr))
print(l)

#horizon 水平的
k=nu.hstack((arre,arrr))
print(k)

# concatenate 连接的意思,默认垂直合并
b=nu.concatenate((arre,arrr))
print(b)


# print(nu.concatenate((arre,arrr),axis=0或1)    #前面只能写入一个容器,后面用axis控制竖着合并还是横着合并
print(nu.concatenate((arrr,arre),axis=1))

# 3.生成布尔矩阵
arr = nu.array([[1, 2, 3],
               [4,5,6]])
print(arr>5)
'''
[[False False False]
 [False False  True]]
'''
print("********************通过函数方法创建多维数组**************************************")
a1=[i for i in range(10)]
print(a1)
# np.arage(起始值,结束值,步长)#顾头不顾尾,用法类似for 循环中的range
a2=[i for i in nu.arange(10)]
print(a2)

a3=[i for i in nu.arange(1,10,2)]
print(a3)

# .zeros/ones/eye
# 构造3*4的全0矩阵
print(nu.zeros((3, 4))) #填的值为(行数,列数)
"""[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]"""

# 构造3*4的全1矩阵
print(nu.ones((3, 4)))  #填的值为(行数,列数)
"""[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]"""

# 构造3个主元的单位矩阵
print(nu.eye(3))     #填的值为(主元的个数)
'''
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]
'''

# 2.linspace/logspace
# 构造一个等差数列,取头也取尾,从0取到20,取5个数
print(nu.linspace(0, 20, 5))
#[  0.   5.  10.  15.  20.]

# 构造一个等比数列,从10**0取到10**20,取5个数
print(nu.logspace(0, 20, 5))
# [1.e+00 1.e+05 1.e+10 1.e+15 1.e+20]

# 意思就是 生成两行两列 为十个零的数
print(nu.zeros((2,2,2)))
print("********************矩阵的运算**************************************")
# 两个矩阵对应元素相加
# 两个矩阵对应元素相减
# 两个矩阵对应元素相乘
# / 两个矩阵对应元素相除,如果都是整数则取商
# % 两个矩阵对应元素相除后取余数
# n 单个矩阵每个元素都取n次方,如2:每个元素都取平方

ar = nu.array([[1, 2, 3],[4,5,6]])
er= nu.array([[3, 2, 4],[5,3,7]])
print(ar+er)
"""[[ 4  4  7]
 [ 9  8 13]]"""

print(ar*2)
"""[[ 2  4  6]
 [ 8 10 12]]"""

# 点乘和转置(了解) 点乘必须 m*n n *m
print(nu.dot(ar,er.T))
"""[[19 32]
 [46 77]]"""

# 求逆(了解)
print(nu.linalg.inv(nu.dot(ar,er.T)))

"""[[-8.55555556  3.55555556]
 [ 5.11111111 -2.11111111]]"""


# 获取矩阵所有元素中的最大值
# print(ar.max())

# 获取举着每一列的最大值
# print(ar.max(axis=0))

# 获取矩阵每一行的最大值
# print(ar.max(axis=1))

# 获取矩阵最大元素的索引位置
# print(ar.argmax(axis=1)

# 获取矩阵所有元素的平均值
# print(ar.mean())

# 获取矩阵每一列的平均值
# print(ar.mean(axis=0))

# 获取矩阵每一行的平均值
# print(ar.mean(axis=1))

# 获取矩阵所有元素的方差
# print(ar.var())

# 获取矩阵每一列的元素的方差
# print(ar.var(axis=0))

# 获取矩阵每一行的元素的方差
# print(ar.var(axis=1))
print("********************numpy生成随机数**************************************")
# https://www.cnblogs.com/pythonywy/p/11010790.html
# https://www.cnblogs.com/geyatou322/p/11012088.html
# https://www.runoob.com/numpy/numpy-tutorial.html
# RandomState()方法会让数据值随机一次,之后都是相同的数据
rs = nu.random.RandomState(1)
print(rs.rand(10))


# 构造3*4的均匀分布的矩阵
# seed()方法会让数据值随机一次,之后都是相同的数据
np.random.seed(1)
print(nu.random.rand(3, 4))

# 构造3*4*5的均匀分布的矩阵
print(nu.random.rand(3, 4, 5))

# 构造3*4的正态分布的矩阵
print(nu.random.randn(3, 4))

# 构造取值为1-5内的10个元素的ndarray数组
print(nu.random.randint(1, 5, 10))

# 构造取值为0-1内的3*4的矩阵
print(nu.random.random_sample((3, 4)))

# 随机选取arr中的两个元素
print(nu.random.choice(arr, size=2))
# https://www.runoob.com/w3cnote/python-pip-install-usage.html




原文地址:https://www.cnblogs.com/Sup-to/p/11040497.html