第一单元:
一、ndarray:n维数组对象,
①数组对象可以去掉元素之间运算所需要的循环,使一维向量更像单个数据
②ndarray由两部分构成:实际数据和描述数据的数据(数据的维度,数据的类型一般要求数组的类型相同)
轴:保存数据的维度 秩:轴的数量
二、ndarray数组的创建
endpoint:表示10是否是生成的元素的最后一个
三、数组的维度和元素类型的变换
注意:reshape和flatten不修改原数组,而是生成新的数组
astype方法会产生一个数组的拷贝,会产生新的数组,即使元素的类型一致
三、ndarray数组的操作——索引和切片
一维数组的切片:数组的起始下标 数组的终止下标(不包含) 步长
四、ndarray数组的运算
第二单元
numpy的数据存取
将numpy数据的元素存入.csv文件 savetxt中fmt是在写入文件时设定的格式;
多维数据的存取:
count可以设置一个读入的数量;. dtype设置读取的数据的类型,在下面dtype如果指定为str就会读取50个逗号;
注意:fromfile会读取一个一维数组,所以要reshape成三维数组
随机数函数
通过调用seed调用相同的随机数组
第一轴即最外面的维度来进行打乱数组;
注意:permutation的函数会返回一个新的数组;choice只能从一维数组中抽取
NUMPY的统计函数
axis设置为n那么就在n+1的维度上进行运算
argmin和argmax可以将数组的元素的位置返回
当只有一侧有数字时,梯度就用当前值减去上一个值得到梯度;
手绘效果代码:
# coding:utf8
fromPILimportImage
importnumpyasnp
if__name__ =='__main__':
a = np.asanyarray(Image.open("data/5503.jpg").convert('L')).astype('float')
depth =10# (0-100)
grand = np.gradient(a)#取图像的灰度的梯度值
grand_x,grand_y = grand#分别取横纵图像的梯度值
grand_x = grand_x * depth /100
grand_y = grand_y * depth /100
A = np.sqrt(grand_x **2+ grand_y **2+1.)
uni_x = grand_x / A
uni_y = grand_y / A
uni_z =1./ A
vec_e1 = np.pi /2.2#光源的俯视角度, 弧度值
vec_az = np.pi /4.#光源的但范围角度 弧度值
dx = np.cos(vec_e1) * np.cos(vec_az)#光源对轴的影响
dy = np.cos(vec_e1) * np.cos(vec_az)
dz = np.sin(vec_e1)
b =255* (dx * uni_x + dy * uni_y + dz * uni_z)#光源归一化
b = b.clip(0,255)
im = Image.fromarray(b.astype('uint8'))
im.save('data/55_hand.jpg')