首先导入模块
import numpy as npy
创建数组:
s = npy.array([[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] , [ 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 ] , [ 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 ]])
查看数组属性:
name.ndim #数组的维度
name.size #数组元素个数
name.dtype # 数组的数据类型
根据条件筛选数组元素:
名字:
name = npy.array(['a','b','c'])
科目(假定的难得写具体的):
sub=npy.array(['a1','a2','a3','a4','a5','a6','a7','a8','a9','a10'])
name[(name=='a')|(name =='b')]
array(['a', 'b'], dtype='<U1')
name[ ]
切片操作:
1)访问指定的行列的情况:
arr[ row , column ]
row 为行序列号
column 为列序列号
s[[1,0],[1,2]]
出现的元素:
array([12, 3])
这种情况表示的是 抽取
行序列号为1,列序列号为1 的元素 12
和
行序列号为0,列序列号为2的元素 3
访问部分元素:
① 访问部分行元素的时候给出行列表即可,列索引“ :”可以省略
s[[0,2]]
表示访问第1 行(默认第一列下标为0)和第二行的所有元素
结果:
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30]])
② 访问部分列元素:
s[ : , [ 0 , 6 ]]
输出结果:
array([[ 1, 7],
[11, 17],
[21, 27]])
前面的 “ :” 不能省略,否则无法识别切片。
代表访问的是 第1列和第7列 的所有数据
③访问固定行的某一段列数据:
s[ [0,2],1:5]
输出结果:
array([[ 2, 3, 4, 5],
[22, 23, 24, 25]])
表示的是输出第1行和第3行的2到6列的数据
条件筛选 可以使用bool 类型的数组来访问其他类型数组的元素。用于筛选的bool 数组,需要具有与访问数组相同的行数和列数。如若筛选莫行的列数和行数的话:
注意下面要用到前面写过的数据
k = (name=='a')|(name =='b')#k为a的那一列和b的那一列
name[k]
array(['a', 'b'], dtype='<U1')#输出的就是a和b
k = (name=='a')|(name =='b')
k
array([ True, True, False])#检查是否是哪一列(应该是有一种代表吧)
s[(name == 'a')|(name == 'b'),:]
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
上面就用到了切片的知识和那个位置(感觉比c好用多了)
s[(name == 'a')|(name == 'b')][:,(sub=="a3")|(sub=="a5")]
array([[ 3, 5],
[13, 15]])
这里需要注意两点 1 他有两个【】【】 ,所以在写的时候要明白意思(目前不知道意思)
—————————————————————————————
创建多维数组的方法
arange函数
arange()函数可以给定的起始范围和步长,生成一个由数值序列组成的数组,规则与列表索引相同,如生成从0 开始到10结束的连续整数数组;:
arange( 开始值 , 末尾值-1 ,步长 )
npy.arange(0,11)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
npy.arange(1,100,8)
array([ 1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97])
浮点数也没问题
reshape()函数
是用reshape 函数可以将一维数组转换成指定的多维数组,如将有15个连续整数的一维数组转换成3*5的二维数组
reshape( 行数 ,列数 )
npy.arange(1,16).reshape(3,5)
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]])
zeros()函数 和ones()函数
zeros 函数和ones函数生成指定大小的全为0 和1的数组,如分别生成34 和43的全1数组
npy.zeros((3,4))
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
npy.ones((4,3))
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
zeros 和 ones 的参数都是元组( n ,m )其中n为行 m为列
多维数组的运输操作:
为所有同学的成绩加上5分:
s+5
array([[ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23, 24, 25],
[26, 27, 28, 29, 30, 31, 32, 33, 34, 35]])
加上一个数组:
创建一个a 数组,其中的ones 里面应该是元组
a = npy.ones((3,10))+6
a+s
array([[ 8., 9., 10., 11., 12., 13., 14., 15., 16., 17.],
[18., 19., 20., 21., 22., 23., 24., 25., 26., 27.],
[28., 29., 30., 31., 32., 33., 34., 35., 36., 37.]])
看看a 中的元素是多少:
a
array([[7., 7., 7., 7., 7., 7., 7., 7., 7., 7.],
[7., 7., 7., 7., 7., 7., 7., 7., 7., 7.],
[7., 7., 7., 7., 7., 7., 7., 7., 7., 7.]])
上诉加法采用的是广播机制先把标量5转化成数组,再和s 按位相加得到新的数组
二维数组和一维数组的运算:
由于每一科的基础分不同 所以还应该加一个基础分。首先创建一个一维数组来存放不同科目增加的分数,再和 s 相加:
b=npy.array([1,2,3,4,5,6,7,8,9,10])
s+b
array([[ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20],
[12, 14, 16, 18, 20, 22, 24, 26, 28, 30],
[22, 24, 26, 28, 30, 32, 34, 36, 38, 40]])
上诉做法也采用的是广播机制,先把b变成和s列行相同的二维数组,再和scores相加
选定元素运输:
如给a这个人的a3 这个科目上面加5分:
>>> s[name == 'a',sub == "a3"]
array([3])
>>> s[name == 'a',sub == "a3"]+5
array([8])
函数和矩阵运算:



将考试成绩转换成整数形式的十分制分数:
>>> npy.floor(s/10)
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 2.],
[2., 2., 2., 2., 2., 2., 2., 2., 2., 3.]])

使用subtract 为数组中的每一个元素减去3分
>>> npy.subtract(s,3)
array([[-2, -1, 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23, 24, 25, 26, 27]])
当然sbtract 函数肯定也是使用了广播机制的 将3转换成数组
聚集函数:

对于二维数组对象可以指定在行操作或者列操作当参数axis为0时函数操作对象在同列不同行的数组元素,当axis参数为1 时是同行不同列的数组元素。
s.sum=(axis = 0 )#按列求和
s[name == 'a2'].mean() # 求平均分
name[scores[; sub == 'a3'].argmax()]#求a3这个学科的 列的最高分
