
一言以蔽之,numpy是python中基于数组对象的科学计算库。
提炼关键字,可以得出numpy以下三大特点:
因为numpy是一个python库,所以使用python包管理工具pip或者conda都可以安装。
安装python后,打开cmd命令行,输入:
即可完成安装。
n维数组(ndarray)对象,是一系列 同类数据 的集合,可以进行索引、切片、迭代 *** 作。
numpy中可以使用 array 函数创建数组:
判断一个数组是几维,主要是看它有几个轴(axis)。
一个轴表示一维数组,两个轴表示二维数组,以此类推。
每个轴都代表一个一维数组。
比如说,二维数组第一个轴里的每个元素都是一个一维数组,也就是第二个轴。
一维数组一个轴:
二维数组两个轴:
三维数组三个轴:
以此类推n维数组。
numpy中常用 array 函数创建数组,传入列表或元组即可。
创建一维数组,并指定数组类型为 int :
创建二维数组:
还可以使用 arange 函数创建一维数字数组,用法类似python的 range 函数
numpy的 random 模块用来创建随机数组。
random模块还有其他函数,这里不多说。
前面说到,数组维度即代表轴的数量。
我们可以通过数组(adarray)对象的ndim或shape属性,来查看轴的数量。
数组(ndarray)对象的 size 属性可以查看数组包含元素总数。
还可以通过 shape 属性返回元素的乘积,来计算数组元素数量。
Numpy支持的数据类型非常多,所以很适合做数值计算。
下面给出常见的数据类型:
数组(adarrry)对象提供 dtype 属性,用来查看数组类型。
前面说过,数组的 shape 属性返回一个元组,能够反映数组的形状,包括维度以及每个轴的元素数量。
那么如果给定一个数组,怎么改变其形状呢?
常用的方式有两种:
比如说我要将一个二维数组转换为三维数组。
reshape 方法可以传入整数或者元组形式的参数。
传入的参数和 shape 属性返回的元组的含义是一样的。
例如, x2reshape(1,2,3) 是将二维数组转换成三维数组,参数个数代表要转换的维度,参数数字从左到右分别表示0轴、1轴、2轴的元素数量。
resize 方法和 reshape 方法使用形式一样,区别是 resize 方法改变了原始数组形状。
numpy一维数组的索引和切片 *** 作类似python列表,这里不多讲。
比如说取一维数组前三个元素。
重点是对多维数组的索引和切片。
多维数组有多个轴,那么就需要对每个轴进行索引。
例如,三维数组形状为(x,y,z),分别代表:0轴有x个元素、1轴有y个元素,2轴有z个元素。
对0、1、2轴进行索引,如果取o轴第2个元素、1轴第0个元素、2轴第3个元素,那么索引形式就为[2,0,3]。
切片也是同样道理。
如果取o轴前2个元素、1轴前1个元素、2轴后2个元素,那么切片形式就为[:2,:1,-2:]。
说到迭代,大家很容易想到直接对数组直接使用 for 循环 *** 作,对于一维数组来说,当然是可以的。
但对于多维数组,迭代是相对于0轴完成的,就是多维数组最外层的那一维。
你没有办法直接遍历数组里每一个元素,嵌套循环又太低效。
这个时候就需要用到 flat 方法,它可以将多维数组平铺为一维的迭代器。
数组(ndarray)对象提供了ravel方法,用来将多维数组展开为一维数组。
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对多个数组的算术运算通常在相应的元素上进行。
较小的数组在较大的数组上“广播”,以便它们具有兼容的形状。
比如说一个一维数组乘以一个数字,相当于一维数组里每个元素都乘以这个数。
如果相同维度的数组进行运算,其shape相同,那么广播就是两个数组相同位数的元素进行运算。
如果两个数组维度不同,进行运算,这里就触发了广播的两个规则。
这两个规则保证了不同维度数组进行运算时,其维度自动调整成一致。
numpy提供了 transpose 函数用以对数组进行维度的调换,也就是转置 *** 作。
转置后返回一个新数组。
当然,可以用更简单的方法。
数组对象提供了 T 方法,用于转置,同样会返回一个新数组。
numpy的 concatenate 函数用于沿指定轴连接相同形状的两个或多个数组。
numpy的 unique 函数用于去除数组中的重复元素,返回一个新数组。
unique 函数还能返回重复元素的索引、计数等信息,可去查文档自定义参数。
numpy文档
菜鸟教程
foreach遍历数组的好是可以不知道数组的长度从而读出数组的key,name出来了,在php的foreach中有两种方法,arr_name as $value 和arr_name as $key => $value了
NumPy的排序方法有直接排序和间接排序。直接排序是对数据直接进行排序,间接排序是指根据一个或多个键值对数据集进行排序。直接排序使用 sort()函数,间接排序使用 argsort函数和lexsort函数。
sort函数是常用的排序方法,函数调用改变原始数组,无返回值。
格式:numpysort(a, axis, kind, order)
参数:
a : 要排序的数组
axis: 使得sort函数可以沿着指定轴对数据集进行排序。axis=1 为沿横轴排序,axis=0为沿纵轴排序,axis=None将数组平坦化后进行排序。
kind: 排序算法,默认 quicksort
order: 如果数组包含字段,则是要排序的字段
a = nparray([7, 9, 5, 2, 9, 4, 3, 1, 4, 3])
print('原数组:', a)
asort()
print("排序后: ", a)
输出:
原数组: [7 9 5 2 9 4 3 1 4 3]
排序后: [1 2 3 3 4 4 5 7 9 9]
带参数轴的排序
a = nparray([[4, 2, 9, 5], [6, 4, 8, 3], [1, 6, 2, 4]])
print("原数组:", a)
asort(axis=1)
print("排序后: ", a)
输出:
原数组: [[4 2 9 5]
[6 4 8 3]
[1 6 2 4]]
排序后: [[2 4 5 9]
[3 4 6 8]
[1 2 4 6]]
使用argsort, lexsort函数,可以在给定一个或多个键时,得到一个由整数构成的索引数组,索引值表示数据在新序列中的位置。
a = nparray([7, 9, 5, 2, 8, 4, 3, 1, 4, 3])
print("原数组:", a)
print("排序后: ", aargsort())
# 返回数组下标排序
print('显示较大的5个数:', a[aargsort()][-5:])
输出:
原数组: [7 9 5 2 8 4 3 1 4 3]
排序后: [7 3 6 9 5 8 2 0 4 1]
显示较大的5个数: [4 5 7 8 9]
a = [1, 5, 7, 2, 3, -2, 4]
b = [9, 5, 2, 0, 6, 8, 7]
ind = nplexsort((b, a))
print('ind', ind)
tmp = [(a[i], b[i])for iin ind]
print('tmp', tmp)
输出:
ind [5 0 3 4 6 1 2]
tmp [(-2, 8), (1, 9), (2, 0), (3, 6), (4, 7), (5, 5), (7, 2)]
在统计分析中,需要提前将重复数据剔除。可以使用unique函数找到数组中唯一值并返回已排序的结果。参数return_counts设置为True时,可返回每个取值出现的次数。
数组内数据去重
names = nparray(['红色', '蓝色', '蓝色', '白色', '红色', '红色', '蓝色'])
print('原数组:', names)
print('去重后的数组:', npunique(names))
print('数据出现次数:', npunique(names, return_counts=True))
输出:
原数组: ['红色' '蓝色' '蓝色' '白色' '红色' '红色' '蓝色']
去重后的数组: ['白色' '红色' '蓝色']
数据出现次数: (array(['白色', '红色', '蓝色'], dtype='<U2'), array([1, 3, 3], dtype=int64))
统计分析时需要把一个数据重复若干次,在NumPy中主要使用tile, repeat函数实现重复数据
numpytile(A, reps)
a = nparange(5)
print('原数组:', a)
w = nptile(a, 3)
print("重复数据:", w)
输出:
原数组: [0 1 2 3 4]
重复数据: [0 1 2 3 4 0 1 2 3 4 0 1 2 3 4]
numpyrepeat(a, reps, axis=None)
参数:a 是需要重复的数组元素,reps是重复次数, axis只沿着那个轴进行,0 按进行元素重复, 1表按列元素进行重复
a = nparange(5)
print('原数组:', a)
w = nptile(a, 3)
print('重复数据处理:\n', w)
a2 = nparray([[1, 2, 3], [4, 5, 6]])
print('重复数据处理1:\n', a2repeat(2, axis=0))
print('重复数据处理2:\n', a2repeat(2, axis=1))
输出:
原数组: [0 1 2 3 4]
重复数据处理:
[0 1 2 3 4 0 1 2 3 4 0 1 2 3 4]
重复数据处理1:
[[1 2 3]
[1 2 3]
[4 5 6]
[4 5 6]]
重复数据处理2:
[[1 1 2 2 3 3]
[4 4 5 5 6 6]]
常见有sum, mean, std, var, min, max, 几乎所有的统计函数在针对2维数组时需要注意轴的概念。
axis参数0时,表示沿纵轴,1表示沿横轴
a = nparange(20)reshape(4, 5)
print('创建的数组:\n', a)
print('数组的和:', npsum(a))
print('数组纵轴的和: ', npsum(a, axis=0))
print('数组横轴的和: ', npsum(a, axis=1))
print('数组的均值: ', npmean(a))
print('数组纵轴的均值: ', npmean(a, axis=0))
print('数组横轴的均值 ', npmean(a, axis=1))
print('数组的标准差: ', npstd(a))
print('数组纵轴的标准差: ', npstd(a, axis=0))
print('数组横轴的标准差: ', npstd(a, axis=1))
输出:
创建的数组:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
数组的和: 190
数组纵轴的和: [30 34 38 42 46]
数组横轴的和: [10 35 60 85]
数组的均值: 95
数组纵轴的均值: [ 75 85 95 105 115]
数组横轴的均值 [ 2 7 12 17]
数组的标准差: 5766281297335398
数组纵轴的标准差: [559016994 559016994 559016994 559016994 559016994]
数组横轴的标准差: [141421356 141421356 141421356 141421356]
NumPy的基础主要包含数组及其索引,数组运算,数组读写以及常用的统计与分析方法。
数组的维度就是一个数组中的某个元素,当用数组下标表示的时候,需要用几个数字来表示才能唯一确定这个元素,这个数组就是几维。numpy中直接用 即可表示数与向量的乘法,参考python 27的一个例子:inport numpy as np a = nparray([1,2,3,4]) # 向量 b = 5 # 数 print ab ++++++++++++ [5,10,15,20]
NumPy数组的下标从0开始。
同一个NumPy数组中所有元素的类型必须是相同的。
在详细介绍NumPy数组之前。先详细介绍下NumPy数组的基本属性。NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。
比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是NumPy中的轴(axes),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。
if(Alength > 0){
int index = 0;
int a = A[0];
for(int i=0; i<Alength; i++){
if(A[i] > a){
a = A[i];
index = i;
}
}
Systemoutprintln("数组中最大值是"+a+",下标是"+index);
}
以上就是关于Numpy基础20问全部的内容,包括:Numpy基础20问、numpy 能不能用数组索引获取二维数组中的单个元素呢、NumPy 中的数据统计分析等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)