利用Numpy进行统计分析

编者前言:

        这份代码演示了如何使用NumPy库来创建、操作和处理多维数组。在这份代码中,我们使用各种NumPy函数来执行不同的数组操作。

        首先,我们使用`np.random.seed()`函数来设置随机数生成器的种子,以便每次生成的随机数是相同的。然后使用`np.random.randint()`函数随机生成一个二维数组,该函数用于生成指定范围内指定大小的随机整数数组。

        接下来,我们使用`np.sum()`、`np.mean()`、`np.var()`、`np.std()`、`np.min()`和`np.max()`函数分别计算了数组的和、均值、方差、标准差、最小值和最大值,并输出结果。此外,还使用了`sum()`和`mean()`函数在不同的轴上计算了数组的和和均值,通过`axis`参数指定计算的轴。最后,使用`np.argmin()`和`np.argmax()`函数返回数组中的最小值和最大值的索引。

        另外,我们还使用了`np.cumsum()`和`np.cumprod()`函数分别计算了数组元素的累计和和累计积,并输出结果。

        总的来说,NumPy是一个强大的数值计算库,能极大地简化数学计算和数据分析任务,尤其对于处理大型多维数组和矩阵运算具有很大的优势。对于需要对数据进行高效处理和分析的任务,使用NumPy来进行数值计算和数据处理无疑是一种非常好的选择。

编辑器: Visual Studio Code

运行环境:Python3.11.3 

                  numpy1.24.3

import numpy as np
arr = np.arange(100).reshape(10,10)
np.save('E:\PY数据分析\数组/save_arr',arr)
print('保存的数组为:\n',arr)

 这段代码可以将一个10行10列的数组保存到指定路径的.npy文件中,代码中使用了numpy库提供的np.save()函数。

运行结果:

arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.arange(0,1.0,0.1)
np.savez('E:\PY数据分析\数组/save_arr',arr1,arr2)
print('保存的数组1为:',arr1)
print('保存的数组2为:',arr2)

这段代码可以将两个numpy数组保存到同一个.npz文件中。代码中使用了numpy库提供的np.savez()函数。

运行结果:

loaded_data = np.load('E:\PY数据分析\数组/save_arr.npy')
print('读取的数组为:\n',loaded_data)
loaded_data1 = np.load('E:\PY数据分析\数组/save_arr.npz')
print('读取的数组1为:\n',loaded_data1['arr_0'])
print('读取的数组2为:\n',loaded_data1['arr_1'])

这段代码可以分别读取之前保存的.npy和.npz文件中的数组。代码中使用了numpy库提供的np.load()函数。对于.npy文件,直接通过np.load()函数读取即可;对于.npz文件,需要通过数组名称来访问已保存的数组。

运行结果:

arr = np.arange(0,12, 0.5).reshape(4,-1)
print('创建的数组为:\n',arr)
np.savetxt('E:\PY数据分析\数组/arr.txt',arr,fmt='%d',delimiter=',')
loaded_data = np.loadtxt('E:\PY数据分析\数组/arr.txt',delimiter=',')
print('读取的数组为:\n',loaded_data)

这段代码可以将一个numpy数组保存为文本文件,然后再从文本文件中读取数组。对于保存的文本文件,可以使用通用的文本编辑器进行查看和编辑。

运行结果:

loaded_data = np.loadtxt('E:\PY数据分析\数组/arr.txt',delimiter=',')
print('读取的数组为:\n',loaded_data)

这段代码可以从文本文件中读取numpy数组。代码中使用了numpy库提供的np.loadtxt()函数,其中,第一个参数是文本文件的路径,第二个参数是分隔符,可以指定多个分隔符。

运行结果:

loaded_data.shape

如果是在读取了一个numpy数组后,想知道该数组的形状(即维度信息),可以通过该数组的shape属性进行获取,shape属性返回一个元组,元组中的每个元素表示该维度对应的大小。例如,对于一个二维数组,shape属性返回的元组中有两个元素,第一个元素表示行数,第二个元素表示列数。

运行结果:

np.random.seed(42)
arr = np.random.randint(1,10,size=10)
print('创建的数组为:',arr)

这段代码利用numpy库的random模块,创建一个包含10个随机整数的numpy数组,其中随机整数的范围是[1, 10)。同时,通过调用np.random.seed()函数,设置了随机种子,保证每次生成的随机数序列相同。

运行结果:

arr.sort()
print('排序后数组为:',arr)

这段代码调用了numpy数组对象的sort()方法来对数组进行原地排序,即在数组中直接排序,不需要创建新的数组。

运行结果:

np.random.seed(42)
arr = np.random.randint(1,10, size=(3, 3))
print('创建的数组为:\n',arr)

arr.sort(axis=1)
print('排序后数组为:\n',arr)

arr.sort(axis=0)
print('排序后数组为:\n',arr)

这段代码创建了一个3×3的随机整数numpy数组,并分别在轴1和轴0上进行了排序。其中,轴1表示按照行对数组进行排序,轴0表示按照列对数组进行排序。使用数组对象的sort()方法进行排序时,需要传入axis参数,用于指定排序的轴。

运行结果:

arr = np.array([2,3,6,8,0,7])
print('创建的数组为:',arr)
print('排序后数组为:',arr.argsort())

 这段代码创建了一个包含六个整数的一维numpy数组,并利用数组对象的argsort()方法,返回数组中每个元素在升序排列中的索引值数组,即返回排列后数组中的位置下标。该方法比较常用于在排序过程中获取索引的信息,以便之后对数据进行筛选或者其他操作。

运行结果:

a = np.array([3,2,6,4,5])
b = np.array([50,30,40,20,10])
c = np.array([400,300,600,100,200])
d = np.lexsort((a,b,c))
print('排序后数组为:\n', list(zip (a[d],b[d],c[d],c[d])))

这段代码利用numpy的lexsort()函数对三个一维数组进行稳定排序,其中,先以c数组为主排序关键字,在c数组相同时,用b数组作为次要关键字排序,在b数组相同时,用a数组作为最后的关键字排序。最终,按照这个排序规则,返回排序后数组的下标。然后通过下标访问排序后的a、b、c数组,即可实现同时按照三个数组进行排序的功能。

运行结果:

names = np.array(['小明','小黄','小花','小明',
                 '小花','小兰','小白'])
print('创建的数组为:',names)

print('去重后的数组为:',np.unique(names))

这段代码创建了一个一维numpy字符串数组names,然后使用numpy的unique()函数获取该数组的唯一值,并返回排序后的结果。unique()函数是用于计算数组唯一值的函数,该函数会返回一个经过排序的数组,该数组中只包含输入数组中的唯一值。

运行结果:

print('去重后的数组为:',sorted(set(names)))

这段代码与上一个代码等价,使用了Python内置的set()集合类型进行了去重,并通过sorted()函数对去重后的结果进行排序,最终输出排序后的唯一值数组。

运行结果:

ints = np.array([1,2,2,2,2,3,4,5,6,6,6,6,7,8,8,8,8])
print(np.unique(ints))

这段代码创建了一个一维的numpy数组ints,然后使用numpy的unique()函数获取该数组的唯一值,并返回排序后的结果。与上面的例子类似,此处也是使用unique()函数去重,并返回一个经过排序的数组,该数组中只包含输入数组中的唯一值。

运行结果:

                                                                                                                                                        

arr = np.arange(5)
print('创建的数组为:',arr)
print('重复后数组为:',np.tile(arr,3))

这段代码首先使用numpy的arange()函数创建了一个一维数组arr,该数组包含了0到4这5个整数。然后使用numpy的tile()函数将该数组重复3次,生成一个新的一维数组。tile()函数会将输入数组沿着不同的方向重复若干次,生成一个新的数组。例如,在这个例子中,重复的方向是0,表示沿着0轴重复多次,即将整个数组在0轴方向重复3次,生成新的一维数组。

运行结果:

np.random.seed(42)
arr = np.random.randint(0,10, size=(3, 3))
print('创建的数组为:\n',arr)
print('重复后数组为:\n',arr.repeat(2,axis=0))
print('重复后数组为:\n',arr.repeat(2,axis=1))

这段代码首先使用了np.random.seed(42)来设置随机数生成器的种子,以便每次生成的随机数是相同的。然后使用np.random.randint()函数随机生成一个3×33×3的数组arr,数组中的元素取自0到10之间。该函数用于生成指定范围内指定大小的随机整数数组。然后使用repeat()方法在不同的轴上重复该数组,并通过axis参数指定重复的轴。

运行结果:

arr = np. arange (20).reshape(4,5)
print('创建的数组为: in',arr)
print('数组的和为: ', np.sum (arr))#w算数组的和

这段代码首先使用arange()函数创建了一个一维数组,然后使用reshape()函数把该一维数组转换成一个4x5的二维数组。然后通过np.sum()函数计算该数组的总和,并输出结果。

运行结果:

arr = np.arange(20).reshape(4,5)
print('创建的数组为:An', arr)
print('数组的和为:',np.sum(arr)) #计算数组的和
print('数组横轴的和为:',arr.sum(axis=0))#治者领铀计算求和
print('数组纵轴的和为: ',arr.sum(axis=1)) #治著纵铀泌算求和
print('数组的均值为:',np.mean(arr))#计算数组均差
print('数组横轴的均值为:', arr.mean(axis=0)) #浴着$铀计舞数组均值
print('沿着纵轴的均值为:',arr. mean(axis=1)) #治着纵铀计算数组均值
print('数组的标准差为:',np.std(arr)) #计算数组标准差
print('数组的方差为:',np. var (arr)) #计算数组方差
print('数组的最小值为:',np.min(arr)) #计算数组最小值
print('数组的最大值为:',np.max(arr)) #计算数组最大值
print('数组的最小元素为:',np.argmin(arr)) #返回数组最小元0的索引
print('数组的最大元素为:',np.argmax(arr)) #返回数组最大元紊的系引

这段代码创建了一个4×54×5的二维数组arr,然后通过np.sum()np.mean()np.var()np.std()np.min()np.max()函数分别计算了数组的和、均值、方差、标准差、最小值和最大值,并输出结果。此外,还使用了sum()mean()函数在不同的轴上计算了数组的和和均值,通过axis参数指定计算的轴,其中0表示横轴,1表示纵轴。最后,使用np.argmin()np.argmax()函数返回数组中的最小值和最大值的索引。

运行结果:

arr = np.arange(2,10)
print('创建的数组为:',arr)
print('数组的元素的累计和为:',np.cumsum(arr))
print('数组的元素的累计和为:\n',np.cumprod(arr))

这段代码首先使用arange()函数创建了一个包含2到9的一维数组arr,然后使用np.cumsum()np.cumprod()函数分别计算了数组元素的累计和和累计积,并输出结果。

运行结果:

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值