第一周 numpy入门

第一单元:

一、ndarray:n维数组对象,

①数组对象可以去掉元素之间运算所需要的循环,使一维向量更像单个数据

②ndarray由两部分构成:实际数据和描述数据的数据(数据的维度,数据的类型一般要求数组的类型相同)

轴:保存数据的维度  秩:轴的数量


ndarray对象的属性


属性测试


有符号的元素类型


无符号的类型和浮点型


复数的类型

二、ndarray数组的创建


创建数组


在python的列表和元组中创建数组


numpy的自带函数创建数组




等间距生成数组

endpoint:表示10是否是生成的元素的最后一个

数据的维数

三、数组的维度和元素类型的变换


数组的维度变换函数

注意:reshape和flatten不修改原数组,而是生成新的数组


数组的类型变换

astype方法会产生一个数组的拷贝,会产生新的数组,即使元素的类型一致

数组类型变换的操作



数组转列表的操作


三、ndarray数组的操作——索引和切片



一维数组的访问和切片

一维数组的切片:数组的起始下标   数组的终止下标(不包含)  步长   


多维数组的索引



多维数组的切片

四、ndarray数组的运算


数组对标量的运算


数组的一元函数


一元函数


二元数组


第二单元

numpy的数据存取

将numpy数据的元素存入.csv文件  savetxt中fmt是在写入文件时设定的格式;

csv文件的生成和写入



读取csv文件的数据


运行测试

多维数据的存取:


将数据写入文件


从文件中读取数据

count可以设置一个读入的数量;. dtype设置读取的数据的类型,在下面dtype如果指定为str就会读取50个逗号;

注意:fromfile会读取一个一维数组,所以要reshape成三维数组


numpy自带的文件存储

随机数函数

通过调用seed调用相同的随机数组


第一轴即最外面的维度来进行打乱数组;

执行shuffle函数之后的发生改变的数组,但是shuffle函数返回值为None

注意:permutation的函数会返回一个新的数组;choice只能从一维数组中抽取



随机函数

NUMPY的统计函数

axis设置为n那么就在n+1的维度上进行运算


测试axis的运算

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

你可能感兴趣的:(第一周 numpy入门)