1 spyder断点调试:
从左往右是:
1.开始调试
2.逐行運行代碼
3.查看當前行中的函数、方法的代码
4.把所在的函数、方法运行完
5.运行到下一个断点
6.结束调试
外部调试
python -m pdb test.py
内部运行
# main.py
import pdb
def main():
pdb.set_trace()
return "yoho"
print(main())
运行main.py, 可以看到在pdb.set_trace()的地方设置了一个断点。
常用命令
c: 继续执行
w: 显示当前正在执行的代码行
a: 打印当前函数的参数列表
s: 执行当前代码行, 并停在第一个能停的地方(step in)
n: 继续执行到当前函数的下一行, 或者当前行知己诶返回(step over)
2 numpy
2.1 array常用操作
import numpy
vector = numpy.array([5, 10, 15, 20])
matrix = numpy.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])
print vector
print matrix
###
[ 5 10 15 20]
[[ 5 10 15]
[20 25 30]
[35 40 45]]
###
#查看向量、矩阵的size
vector = numpy.array([1, 2, 3, 4])
print(vector.shape)
matrix = numpy.array([[5, 10, 15], [20, 25, 30]])
print(matrix.shape)
###
(4,)
(2, 3)
###
#查看数组中数字的类型
numbers = numpy.array([1, 2, 3, 4])
numbers.dtype
###
dtype('int32')
###
#数组array切片
import numpy
vector = numpy.array([5, 10, 15, 20])
print(vector[0:3]
###
[ 5 10 15]
###
matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
print(matrix[:,1])
###
[10 25 40]
###
matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
print(matrix[:,0:2]) #0可以省略
###
[[ 5 10]
[20 25]
[35 40]]
###
matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
print(matrix[1:3,0:2])
###
[[20 25]
[35 40]]
###
#查值
import numpy
vector = numpy.array([5, 10, 15, 20])
vector == 10
###
array([False, True, False, False], dtype=bool)
###
matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
matrix == 25
###
array([[False, False, False],
[False, True, False],
[False, False, False]], dtype=bool)
###
vector = numpy.array([5, 10, 15, 20])
equal_to_ten = (vector == 10)
print (equal_to_ten)
print(vector[equal_to_ten])
###
[False True False False]
[10]
###
matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
second_column_25 = (matrix[:,1] == 25)
print (second_column_25)
print (matrix[second_column_25, :])
###
[False True False]
[[20 25 30]]
###
#同时查两个两个
vector = numpy.array([5, 10, 15, 20])
equal_to_ten_and_five = (vector == 10) & (vector == 5)
print (equal_to_ten_and_five)
###
[False False False False]
###
vector = numpy.array([5, 10, 15, 20])
equal_to_ten_or_five = (vector == 10) | (vector == 5)
print (equal_to_ten_or_five)
vector[equal_to_ten_or_five] = 50
print(vector)
###
[ True True False False]
[50 50 15 20]
###
matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
second_column_25 = matrix[:,1] == 25
print second_column_25
matrix[second_column_25, 1] = 10
print (matrix)
###
[False True False]
[[ 5 10 15]
[20 10 30]
[35 40 45]]
###
import numpy
#转换数组中元素的类型
vector = numpy.array(["1", "2", "3"])
print (vector.dtype)
print (vector)
vector = vector.astype(float)
print (vector.dtype)
print (vector)
###
|S1
['1' '2' '3']
float64
[ 1. 2. 3.]
###
import numpy
#求和操作
vector = numpy.array([5, 10, 15, 20])
vector.sum()
###
50
###
matrix = numpy.array([
[5, 10, 15],
[20, 25, 30],
[35, 40, 45]
])
#按列求和
matrix.sum(axis=1)
#按行求和
matrix.sum(axis=0)
###
array([ 30, 75, 120])
array([60, 75, 90])
###
#没有值的地方插入0值
import numpy
world_alcohol = numpy.genfromtxt("world_alcohol.txt", delimiter=",")
#显示表
is_value_empty = numpy.isnan(world_alcohol[:,4])
#显示为nan的索引
world_alcohol[is_value_empty, 4] = '0'
alcohol_consumption = world_alcohol[:,4]
alcohol_consumption = alcohol_consumption.astype(float)
total_alcohol = alcohol_consumption.sum()
average_alcohol = alcohol_consumption.mean()
#输出和
print (total_alcohol)
#输出平均值
print (average_alcohol)
u = array([[1,2],[3,4]])
m = u.tolist() #转换为list
m.remove(m[0]) #移除m[0]
m = np.array(m) #转换为array
numpy.squeeze()
压缩维度,即把shape中为1的维度去掉
numpy.c_
将切片对象按列转换为连接。
2.2 numpy的增删改查
import numpy as np
a = np.array([[1,2],[3,4],[5,6]])#创建3行2列二维数组。
>>> a
array([[1, 2],
[3, 4],
[5, 6]])
>>> a = np.zeros(6)#创建长度为6的,元素都是0一维数组
>>> a = np.zeros((2,3))#创建2行3列,元素都是0的二维数组
>>> a = np.ones((2,3))#创建2行3列,元素都是1的二维数组
>>> a = np.empty((2,3)) #创建2行3列,未初始化的二维数组
>>> a = np.arange(6)#创建长度为6的,元素都是0一维数组array([0, 1, 2, 3, 4, 5])
>>> a = np.arange(1,7,1)#结果与np.arange(6)一样。第一,二个参数意思是数值从1〜6,不包括7.第三个参数表步长为1.
a = np.linspace(0,10,7) # 生成首位是0,末位是10,含7个数的等差数列[ 0. 1.66666667 3.33333333 5. 6.66666667 8.33333333 10. ]
a = np.logspace(0,4,5)#用于生成首位是10**0,末位是10**4,含5个数的等比数列。[ 1.00000000e+00 1.00000000e+01 1.00000000e+02 1.00000000e+03 1.00000000e+04]
2.2.1 增,矩阵拼接函数:vstack(),hstack(),stack(),concatenate()
vstack() 上下拼接
例子:
hsack() 左右拼接
例子:
stack()直接堆叠
concatenate()
2.2.2 查,出了上面array的切片等等操作主要是where函数的使用
np.where(condition, x, y),第一个参数为一个布尔数组,第二个参数和第三个参数可以是标量也可以是数组。
cond = numpy.array([True,False,True,False])
a = numpy.where(cond,-2,2)# [-2 2 -2 2]
cond = numpy.array([1,2,3,4])
a = numpy.where(cond>2,-2,2)# [ 2 2 -2 -2]
b1 = numpy.array([-1,-2,-3,-4])
b2 = numpy.array([1,2,3,4])
a = numpy.where(cond>2,b1,b2) # 长度须匹配# [1,2,-3,-4]
2.2.3 删,方法很多,主要记录delete
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> np.delete(a,1,axis = 0)#删除a的第二行。
array([[1, 2],
[5, 6]])
>>> np.delete(a,(1,2),0)#删除a的第二,三行。
array([[1, 2]])
>>> np.delete(a,1,axis = 1)#删除a的第二列。
array([[1],
[3],
[5]])