Python数据分析之numpy的使用

作者将自己学习numpy的代码+笔记分享一下,想学哪一部分就把哪一部分的注释去掉即可,便于初学者学习和复习:

import numpy as np

'''主要是根据数据构建算法可能用到的矩阵,对于矩阵可以进行相应的处理变换'''

#将一个列表输出成一维向量,列表的列表输出为矩阵
# The numpy.array() 可以将一个列表输出成一维向量 列表的列表输出为矩阵(即上面说的ndarray)
vector = np.array([5, 10, 15, 20])  # 一维向量(当然也是矩阵)
# 矩阵,矩阵中的列表值必须为相同类型,只要有字符,就全变为字符,如果有True,就定义为1
matrix = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45],[33,22,33]])
# print(vector)
# print(matrix)
# #
# print(vector.shape)  #(4,)
# # .shape输出矩阵维度
# print(matrix.shape)#(4, 3)表示四行三列


# print(matrix[:,1])#取所有行的第2列
#
# vec_equal_to_ten=(vector==10)
#
# #找到矩阵中有没有值等于一个数,返回的是含有布尔值的列表
# print(vec_equal_to_ten)
#
# #输入有10的那一行,在一维向量中,每一个数都是行
# #这个可以检查所有数中有没有该值,没有的话就返回[],比True和False快速
# print(vector[vec_equal_to_ten])
#
# #检查矩阵中所有行的第二列是否有等于25的,如果有就返回该行
# matrix_second_col_25=matrix[:,1]==25
#
# print(matrix[matrix_second_col_25])
#

# #与或表达式
# vec_equal_to_ten_or_five=(vector==10)|(vector==5)
# print(vector[vec_equal_to_ten_or_five])

# #改变所有值的操作,不改变原来矩阵的类型
# vec=vector.astype(str)#把矩阵中所有元素变成字符串,但是不改变矩阵结构
# print(vec)
# print(vector)

# #生成0~14组成的向量
# m=np.arange(15)
# print(m)
# print(m.reshape(3,5))#一共15个向量,将向量变成3*5的矩阵
#
# # #形状,元素个数,数据类型名称,维度:一般都是二维矩阵
# print(m.shape,m.size,m.dtype.name,m.ndim)

# # 注意zeros()中需是一个元祖
# print(np.zeros((3, 4)))  # 默认float类型
# # 三维矩阵(每个元素都是整数1),两?三行四列,高维不知道怎么说
# print(np.ones((2, 3, 4), dtype=np.int32))
#
# print(np.arange(10, 30, 5))  # 10开始<30结束,每5个取一个值
#
'''默认从0到1产生随机数,产生二行三列的数组'''
# print(np.random.random((2,3)))
##返回一组具有标准正态分布的样本
# print(np.random.randn(2,4))


# #这个pi必须要说明是从numpy引入的,否则当作变量处理
# from numpy import pi
# # 起始0到2*pi平均取100个值
# print(np.linspace(0, 2 * pi, 10))#是平均取值

# a = np.array([20,30,40,50])
# b = np.arange(4)
# # b**2表示矩阵所有元素平方
# print(b**2)
# # a<35表示对矩阵所有元素判断,每个元素都返回布尔值
# print(a<35)
#
# '''A*B表示AB矩阵的元素本身相乘
# 而A.dot(B)/np.dot(A,B)是AB两个矩阵做矩阵乘法运算'''
# print(b)
# # 求指数幂
# print(np.exp(b))
# # 开方
# print(np.sqrt(b))

# a = np.floor(10*np.random.random((3,4)))# floor函数表示向下取整
# print(a)
# print("--------------------------------")
# # ravel函数把矩阵拉成一个向量
# print(a.ravel())
# print("--------------------------------")
# #注意a.shape()是永久改变数组结构,而reshape函数不改变
# a.shape = (6,2)
# # a.reshape(3,-1) 当行或列确定后,另一个可以置为-1,它自己会算出正确结果
# print(a)
# print("--------------------------------")
# # 转置
# print(a.T)

# a = np.floor(10 * np.random.random((2, 2)))
# b = np.floor(10 * np.random.random((2, 2)))
# print(a)
# print("--------------------")
# print(b)
# print("--------------------")
# # 横着拼接
# print(np.hstack((a, b)))
# print("--------------------")
# # 纵着拼接
# print(np.vstack((a, b)))

'''np.hsplit(a,(3,4)) 是一个 numpy 函数,它用于沿着水平轴(列)将数组 a 分割成多个子数组。在这种情况下,它将在第3列和第4列之后分割数组 a。
这意味着,它将返回三个子数组:第一个包含前三列,第二个包含第四列,第三个包含剩余的列1。'''
# a = np.floor(10*np.random.random((2,12)))
# print(a)
# print("--------------")
# # 按行切分 ,切成3份
# print(np.hsplit(a,3))
# print("--------------")
# # 指定位置切分
# print(np.hsplit(a,(3,4)))
# b = a.T
# print(b)
# print("--------------")
# # 按列切:vsplit是横着切,hsplit是竖着切
# c=np.vsplit(b,3)
# print(c)

'''a=b地址赋值,深复制
a=b.view()只是指向不同,但是值居然是共用的
a=b.copy()指向不一样,值也不一样,推荐使用这个copy()'''
# a = np.arange(12)
# # a和b指向同一个东西(只是名字不同)
# b = a
# print(b is a)
# print(b.shape)
# print(a.shape)
# print(id(a))# 对应内存上唯一的一个区域
# print(id(b))

'''提取每列最大最小值,其实也可以提取每行的最大最小值'''
# # 这些元素是从0到19的整数的正弦值,其实就是对于矩阵的运算,几乎都是对矩阵元素进行的变换
# # 所以就是将这个矩阵中的元素求sin值
# data = np.sin(np.arange(20).reshape(5,4))
# print(data)
# # 使用 argmax 函数沿着第0轴(即行)找到每一列的最大值的位置(即索引)。这些索引存储在名为 ind 的数组中。
# ind = data.argmax(axis=0)
# print(ind) #该位置索引从0开始
# # 通过ind 取出每列对应的最大值,data.shape在本例中是(5,4),所以data.shape[1]就是4
# data_max = data[ind, range(data.shape[1])]
# print(data_max)
# # 既然0轴是挑选每一列的最大值,那么1轴我猜就是挑选每一行的最大值,甚至我猜有argmin函数
# inr = data.argmax(axis=1)
# print(inr)
# data_max1 = data[range(data.shape[0]),inr]
# print(data_max1)
# # 列的最大值,索引就在行的位置,因为列已经固定了,索引变化的是行
# # 行的最大值,索引就是列的位置


'''数组扩展(其实就是生成一个新的矩阵,矩阵中的元素就是该数组的复制粘贴),matlab中也有类似的操作'''
# a = np.arange(0, 40, 10)
# print(a)
# # 扩展a(扩展两行三列)
# b = np.tile(a, (2,3))
# print(b)

'''每行排序,也可以返回对应关系的索引'''
# a = np.array([[4, 3, 5,],
#               [1, 2, 1]])
# print(a)
# print("--------------------")
# # 按行排序(每行从小到大排)
# b = np.sort(a,axis=1)# 其实本质上来说,axis横轴纵轴就是指示了处理数据的方向
# #因为处理数据的方向是纵轴方向,所以在纵轴上点一个,就是处理一行,再往下点一个,就是继续处理下一行
# print(b)
# print("--------------------")
# print(a) #验证a矩阵是否改变,结果是不变
# print("--------------------")
# a.sort(axis=1) #对a矩阵每行从小到大的排序将永久赋值到a
# print(a)
# print("--------------------")
# a = np.array([4, 3, 1, 2])
# # 返回从小到大的数据对应的索引
# j = np.argsort(a)
# print(j)
# print("--------------------")
# print(a[j])# 通过索引取出值

你可能感兴趣的:(大数据,机器学习,数学建模,python,数据分析,numpy)