Python机器学习及分析工具笔记

目录

 

一.Numpy的安装

二.Numpy的基本使用

1.导入Numpy库,命令如下:

2.数组的创建

(1)例如,下面分别创建一维数组和二维数组:

(2)通过改变数组的shape属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度

(3)reshape   

3.数组的类型

4.数组的其他创建方式

(1)arrange函数

(2)linspace函数

(3)logspace函数

5.数组元素的存取

6.ufunc运算:Numpy里面内置的许多ufunc函数都是在C语言级别实现的,因此它们的运算速度非常快

7.矩阵的运算

8.文件的存取

(1)读写一维和二维的数组:

(2)改为整数保存数据


一.Numpy的安装

pip install numpy

二.Numpy的基本使用

1.导入Numpy库,命令如下:

import numpy as np    #底层是用C语言实现的,效率高

2.数组的创建

      需要创建数组才能进行其他操作。array函数传递Python的序列对象创建数组

(1)例如,下面分别创建一维数组和二维数组

a = np.array([1, 2, 3, 4])
b = np.array((5, 6, 7, 8))
c = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[7, 8, 9, 10]])

数组的大小可以通过shape属性获得:

print(a.shape)#(4,)
print(b.shape)#(4,)
print(c.shape)#(3, 4)

即a、b为4行一列,c为三行四列

(2)通过改变数组的shape属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度

c.shape = 2, -1
print(c)#[[ 1  2  3  4  5  6]
        #[ 7  8  7  8  9 10]]

(3)reshape   

     本身不变,得到一个转化之后的值,创建一个改变之后的新数组.

d = c.reshape(3, 4)
print(c)
# [[ 1  2  3  4  5  6]
#  [ 7  8  7  8  9 10]]
print(d)
#[[ 1  2  3  4]
#[ 5  6  7  8]
#[ 7  8  9 10]]

e = a.reshape(2,2)
print(a)#[1 2 3 4]
print(e)
#[[1 2]
#[3 4]]

数组a和e共享数据存储内存区域,因此修改其中任意一个数的元组都会发生改变

a[0] = 10
print(e)
# [[10  2]
#  [ 3  4]]

3.数组的类型

print(f.dtype)#float64

可以通过dtype参数在创建时指定元素类型

a = np.arange(0, 1, 0.1)
#最后一个值是取不到的:arrange(开始值,终值,步长)
print(a)#[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]

4.数组的其他创建方式

(1)arrange函数

类似于Python的range函数

a = np.arange(0, 1, 0.1)
#最后一个值是取不到的:arrange(开始值,终值,步长)
print(a)#[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]

(2)linspace函数

#linspace(开始值,终值,元素个数,[endpoint])
#endpoint指定是否包括终值,默认设置包括终值
#endpoint是否包括终值,默认设置包括终值
b = np.linspace(0, 1, 12)
print(b)

(3)logspace函数

#logspace创建10^0到10^2的 等比数列
c = np.logspace(0, 2, 10)
print(c)

5.数组元素的存取

a = np.arange(10)
print(a[2 : 5])#[2 3 4]
print(a[2 : -1])#[2 3 4 5 6 7 8]

6.ufunc运算:Numpy里面内置的许多ufunc函数都是在C语言级别实现的,因此它们的运算速度非常快

x = [i * 0.001 for i in range(1000000)]
#(碰到的一个问题)
#start = time.clock()    #time.clock是被弃用的方法,在python3.8的时候将被移除
#use time.perf_counter or time.process_time instead
start = time.perf_counter()
#列表得用for循环进行赋值
for i,t in enumerate(x):#enumerate同时列出列表的下标和对应列表的值
    x[i] = math.sin(t)
print('math.sin:', time.perf_counter() - start)#math.sin: 0.378968541

x = [i * 0.001 for i in range(1000000)]
x = np.array(x) #将列表转化为数组
start = time.perf_counter()
#数组可以直接用np.sin()函数进行调用
np.sin(x)
print('numpy.sin:', time.perf_counter() - start)#numpy.sin: 0.012504123000000034

可以发现,numpy.sin 比math.sin 快得多

7.矩阵的运算

矩阵的乘法要求左边的列数要等于右边矩阵的行数

矩阵的乘积可以使用dot函数计算。对于二维数组,它计算的是矩阵的乘积,对于一维数组,它计算的是点积

a = np.arange(12).reshape(4, 3)
print(a)
# [[ 0  1  2]
#  [ 3  4  5]
#  [ 6  7  8]
#  [ 9 10 11]]
b = np.arange(12, 24).reshape(3, 4)
print(b)
# [[12 13 14 15]
#  [16 17 18 19]
#  [20 21 22 23]]
c = np.dot(a, b)
print(c)
# [[ 56  59  62  65]
#  [200 212 224 236]
#  [344 365 386 407]
#  [488 518 548 578]]

8.文件的存取

(1)读写一维和二维的数组:

#文件的存取
a = np.arange(0, 12, 0.5).reshape(4, -1)
#默认按照‘%。18e’格式保存数据,以空格分隔
np.savetxt("./a.txt", a)#将a保存成text
b = np.loadtxt("./a.txt")
print(b)
# [[ 0.   0.5  1.   1.5  2.   2.5]
#  [ 3.   3.5  4.   4.5  5.   5.5]
#  [ 6.   6.5  7.   7.5  8.   8.5]
#  [ 9.   9.5 10.  10.5 11.  11.5]]

(2)改为整数保存数据

#fmt = "%d"表示只保存整数部分,delimiter = ","表示用’,’进行分隔
np.savetxt("./a2.txt", a, fmt = "%d", delimiter = ",")
b2 = np.loadtxt("./a2.txt", delimiter=",")
print(b2)
# [[ 0.  0.  1.  1.  2.  2.]
#  [ 3.  3.  4.  4.  5.  5.]
#  [ 6.  6.  7.  7.  8.  8.]
#  [ 9.  9. 10. 10. 11. 11.]]
发布了12 篇原创文章 · 获赞 16 · 访问量 441

猜你喜欢

转载自blog.csdn.net/qq_41982039/article/details/102885996