IPython交互Shell使用技巧:
代码提示功能:
部分名字+tab键
显示变量/对象具体信息:名称+?
搜索命名空间:例如使用通配符:np.*aa*?
结果会出现所有中间有俩a的变量名,类,方法等
可以运行脚本代码:%run +路径,绝对路径即可
运行后,该脚本内全局变量,函数,import等都能在IPython界面使用了
执行时按ctrl+c可以中断代码
%paste:将剪切板中的代码作为整体执行
一些魔术命令:
numpy是python中支持科学计算,矩阵操作的第三方库
numpy中的多维数组对象ndarray,实际上是把程序设计语言中的单个数的运算直接泛化到了批量运算,免去写循环的麻烦。其中元素必须是同类型的,有基本属性shape:显示各维度大小,dtype:说明数据类型
ndarray的创建:
1可以用一切序列型对象,比如list,或其他ndarray
2创建同时初始化:全0:np.zeros(10)
多维:np.zeros((3,6))
全1类似,np.ones()
自然数序列:初始化为0~N-1:np.arange(N)
还可等差数列构建:np.arrange(-5,5,0.1):-5开始,每次加0.1到5,共100各数
3创建N阶单位矩阵:np.eye(N)
dtype可以在创建ndarray时人为指定,加参数即可。
dtype也可以认为的进行显式转换:调用arr.astype(newtype)
乘法:ndarray中的*并不是矩阵乘,而是对应位置元素分别乘。
nd数组与单个数字运算,则数组中每个元素都运算。
ndarray的索引与切片:
索引类似于数组。
一维时的切片:array[a:b]表示从a开始,切出b-a个元素,即a~b-1
数组的切片可以赋值,注意,这时并不是复制,而是类似于c++的引用:
arr_slice = arr5[5:8] 此时arr_slice并不是新数组,而是arr5片段的引用,若此时执行:
arr_slice=1,那么arr5[6]会变成1.在numpy中称为“视图”
若想复制,可以用arr[5:8].copy()
二维数组中,索引是取出一行。
类似的,在n维数组中,单值索引会得出n-1维数组,赋值时也是对这个子数组整体赋值
赋值后可用old_values值再赋值一次撤销操作
二维下的双切片:先切行,再切列:
数组名==值机理:值实际上相当于向量,其维数与数组相同,每一个元素对应判断相等。
例如:
这时要求布尔型数组长度必须跟被索引轴长度一致。
即取出了Ture位置对应的行,即第0行与第3行。当names与data有现实意义上的对应关系时这种操作就类似于数据库了
数组转置:即矩阵转置 arr.T
转置提供的是一个视图,不进行任何复制操作
ndarray中有很多矢量化的运算函数,即把针对单个数的函数推广到了针对矩阵的:
np.sqrt(arr),每个元素求平方根
np.exp(arr),每个元素求指数函数
np.modf(arr),把浮点数的整数和小数分开,返回俩数组
将x,y轴都设为0-3,然后求所有坐标的x2+y2的平方根:(根据网格对函数求值)
arr7 =[0,1,2,3];
xs,ys=np.meshgrid(arr7,arr7)
printnp.sqrt(xs**2+ys**2)
关于np.random.randn:
np.random.randn(a,b)产生a行b列的符合N(0,1)正态分布的数据
想产生(μ,x^2)的样本,那么x*np.random.randn(a,b)+μ即可
arr.mean():求平均数
arr.sum()求和
上面俩函数还可以填一个维度axis的参数,用于求该轴上的统计值,常用axis=0横轴,=1竖直轴
sum函数还能对bool函数求出true值的个数
numpy数组也可以用sort方法:
arr.sort()就是从小到大牌序所有数
多维数组还可以在一个轴向上进行牌序,传入维度参数即可
唯一化:np.unique(arr)返回去重后并且排序后的数组
查看是否包含:np.in1d(x,y)
两个矩阵x和y相乘:x.dot(y)或np.dot(x,y)
常用线性代数函数:
部分Demo:
# -*-coding:utf-8-*-
import pandas as pd
import tensorflow
import numpy as np
data1=[1,5,3.1]
arr1=np.array(data1)
arr2=np.array(arr1)
print arr1,arr2,arr1.dtype
data2=[[1,2,3,4],[5,6,7,83]]
arr3=np.array(data2,dtype=np.float64)
print arr3,arr3.shape,arr3.dtype
arr4=np.zeros((2,3))
print arr4
arr5=np.arange(10)
print arr5
arr6=np.eye(10)
print arr6,arr6.dtype
print arr5*arr5
print arr5[5:8]
arr_slice = arr5[5:8]
print arr_slice
#print arr6
print arr6[[1,3,5]]
print arr6[[1,3,5]].T
print np.dot(arr6[[1,3,5]],arr6[[1,3,5]].T)
arr7 =[0,1,2,3];
xs,ys=np.meshgrid(arr7,arr7)
print np.sqrt(xs**2+ys**2)
arr8 = np.random.randn(5,4)
print arr8
print arr8.mean(axis=0)