Python数据分析与机器学习实战<二>Numpy

目录

科学计数库Numpy

数据:

读数据:

Numpy基础结构

numpy.array()

 取值与切片

 判断操作

 bool类型也可以当索引

 Numpy矩阵基础

与、或判断

改变所有值的类型

求极值 

 Numpy常用函数

查看矩阵的各种属性

初始化

 数学运算

矩阵常用操作

开方,求e^x

向下取整、变形、转置

拼接

切分 

不同复制操作对比

方法一(起名字)

方法二(浅复制)

方法三 (深复制)

索引、扩展、排序

索引

扩展 

排序 

其他 


科学计数库Numpy

数据:

通常是一个矩形(每一行表示一个样本,每一列表示,每一列表示当前数据的一个指标)对矩阵的处理,numpy库是专业的!使用之前,需要装numpy库(pip install numpy), Anaconda默认装过了。

读数据:

读txt文件,如图所示:数据与notebook放在一起时,可以直接写文件名,(我没有放在一起,用绝对路径)

import numpy

zc = numpy.genfromtxt("E:\Scores\data.txt", delimiter=",", dtype=str)
# 参数1:文件路径,2:文件中数据的分隔符,3:输出的类型
print(type(zc)) # 变量的结构(ndarray numpy中最核心的结构)
print(zc) # 一个矩阵
print(help(numpy.genfromtxt))# 打印genfromtxt函数的帮助文档

在notebook中运行的结果如下:

当对某个函数不熟悉是,可以用 help()返回它的官方文档,不需要再点开官网看了,比较方便吧

#The numpy.array() 可以将一个列表输出成一维向量 列表的列表输出为矩阵(即上面说的ndarray)
vector = numpy.array([5,10,15,20])#一维向量(当然也是矩阵)
# 矩阵
matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]])
print(vector)
print(matrix)

print(vector.shape)
# 输出矩阵维度
print(matrix.shape)

                        维度:

 .shape : 在后面找debug的时候会有用,可以通过打印所有变量的shape,看哪里出现了问题(看到这儿我也不是很清楚到底可以怎么样,这里先留有一个印象吧!)

Numpy基础结构

numpy.array()

用.array()构造矩阵时,!列表中的元素的类型必须相同

num1 = numpy.array([1,2,3,4])
num2 = numpy.array([1,2,3,4.0])
num3 = numpy.array([1,2,3,'4'])
print(num1)
print(num1.dtype)
print(num2)
print(num2.dtype)
print(num3)
num3.dtype

 取值与切片

注意去矩阵列的语法[:,0:2] 第一个冒号左边代表(所有)行,逗号后面:要取的列

# 取值按照行列取即可
print(vector[2])
print(matrix[2][1])
# 切片与字符串相同
print(vector[0:3]) # 取0,1,2
print(matrix[:,1]) # 取所有行的第2列
print(matrix[:,0:2])# 取所有行的第0列和第1列

 判断操作

# 找矩阵中有没有值等于一个数
print(vector == 10)

matrix == 25

 bool类型也可以当索引

布尔值做索引时,TRUE返回对应的值

equal_to_ten = (vector == 10)
print(equal_to_ten)
# equal_to_ten作为索引
print(vector[equal_to_ten])

# 对矩阵同理
second_col_25 = (matrix[:,1] == 25)
print(second_col_25)
# 输出有25的那一行
print(matrix[second_col_25,:])

 Numpy矩阵基础

与、或判断

# 一个值既等于10又等于5
equal_to_ten_and_five = (vector == 10) & (vector == 5)
print(equal_to_ten_and_five)
# 一个值等于10或等于5
equal_to_ten_or_five = (vector == 10) | (vector == 5)
print(equal_to_ten_or_five)

  

改变所有值的类型

vec = numpy.array(["1", "2", "3"])
print(vec.dtype)
print(vec)
# 将所有值改为float类型
vec = vec.astype(float)
print(vec.dtype)
print(vec)

求极值 

vector = numpy.array([5,10,15,20])
print(vector.min())# 输出最小的值

matrix = numpy.array([[5,10,15],[20,25,30],[35,40,45]])
# 对每一行求和
print(matrix.sum(axis=1))
# 对每一列求和
print(matrix.sum(axis=0))

 Numpy常用函数

查看矩阵的各种属性

import numpy as np # numpy起一个别名np
# 0~14组成的向量
m = np.arange(15)
print(m)
m = m.reshape(3, 5) # 变成3*5的矩阵
print(m)
# m的形状
print(m.shape)
# m的维度
print(m.ndim)
# m中的数据类型
print(m.dtype.name)
# m中元素个数
print(m.size)

 初始化

# 注意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个取一个值

# 默认从-1到1产生随机数
print(np.random.random((2,3)))

 

from numpy import pi
# 起始0到2*pi平均取100个值
np.linspace(0, 2*pi, 100)

 

 数学运算

a = np.array([20,30,40,50])
b = np.arange(4)
print(a)
print(b)
# a-b
c = a-b
# c-1
print(c)
c = c - 1
print(c)
# b**2
print(b**2)
# a<35
print(a<35)

A = np.array([[1,1],
              [0,1]])
B = np.array([[2,0],
             [3,4]])
print(A)
print("-----------")
print(B)
print("-----------")
# A*b相当于对应位置相乘
print(A*B)
print("-----------")
# A.b相当于矩阵相乘
print(A.dot(B))
print("-----------")
print(np.dot(A,B))# 与上面等价

 

 矩阵常用操作

开方,求e^x

import numpy as np

B = np.arange(3)
print(B)
# 求幂
print(np.exp(B))
# 开方
print(np.sqrt(B))

向下取整、变形、转置

a = np.floor(10*np.random.random((3,4)))# 想下取整
print(a)
print("--------------------------------")
# 把矩阵拉成一个向量
print(a.ravel())
print("--------------------------------")
a.shape = (6,2)
# a.reshape(3,-1) 当行或列确定后,另一个可以置为-1,它自己会算出正确结果
print(a)
print("--------------------------------")
# 转置
print(a.T)

拼接 

import numpy as np

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)))

切分 

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("--------------")
# 按列切
np.vsplit(b,3)

------------------> 

 不同复制操作对比

方法一(起名字)

a = np.arange(12)
# a和b指向同一个东西(只是名字不同)
b = a
print(b is a)
b.shape = 3,4
print(a.shape)
print(id(a))# 对应内存上唯一的一个区域
print(id(b))

方法二(浅复制)

# a和c指向不同的东西,但他们共用值
c = a.view()
print(c is a)
c.shape = 2,6
print(a.shape)
c[0,4] = 1234# 所以c中某个值变了,a中对应的位置值也会变
print(a)
print(id(a))
print(id(c))

方法三 (深复制)

d = a.copy()
print(d is a)
d[0,0]=999
print(d)
print(a)

索引、扩展、排序

索引

import numpy as np
data = np.sin(np.arange(20).reshape(5,4))
print(data)
# 返回每一列最大值的位置(即索引即其所在行)
ind = data.argmax(axis=0)
print(ind)
# 通过ind 取出对应的最大值
data_max = data[ind, range(data.shape[1])]
print(data_max)

扩展 

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)
print(b)
print("--------------------")
a.sort(axis=1)
print(a)
print("--------------------")
a = np.array([4, 3, 1, 2])
# 返回从小到大数据对应的索引
j = np.argsort(a)
print(j)
print("--------------------")
print(a[j])# 通过索引取出值

其他 

除了上面这些,其他的以后用到了再学习吧!(2021/10/18)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值