Numpy的属性及接口(求和/排序/均值/标准差/中位数等)

本文详细介绍了使用NumPy进行数据分析的各种技巧,包括探索数据属性、接口、条件概率计算、百分位数求解、排序方法及其区别,以及如何利用这些工具进行有效的数据分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 探索属性

在做数据分析之前,我们需要了解我们的数据,那么如何查看数据的属性,操作如下:

a=np.arange(8)

print(a)						# 打印数组
print(a.ndim)					# 秩 1
print(a.size)					# 整个数组中元素个数8个
print(a.shape)					# 结果 (8,)
print(a.dtype.name)				# 数组中数据的类型 int64
print(type(a))					# 数组类型 <class 'numpy.ndarray'>
print(a.itemsize)				# 数据类型占用的空间大小 8

2. 探索接口

  • 最大元素,最小元素
a = np.array([[32, 15, 6, 9, 14], 
              [12, 10, 5, 23, 1],
              [2, 16, 13, 40, 37]])

a.min()				# 所有元素中最小的 1
a.max()				# 所有元素中最大的 40

np.min(a,axis=1)	# 按行找,找到每行最小值 array([6, 1, 2])
np.max(a,axis=0)	# 按列找,找到每列最大值 array([32, 16, 13, 40, 37])
  • 找最小大值索引:arr.argmin()np.argmin(arr)

需要注意的是,无论数组是几维,返回最大最小值的索引都是作为“一维”数组的索引

a = np.array([[32, 15, 6, 9, 14], 
              [12, 10, 5, 23, 1],
              [2, 16, 13, 40, 37]])

a.argmin()				# 9
np.argmax(a)			# 13
  • 求和,累加

(1)全部元素求和:arr.sum()np.sum(arr)
(2)按行或列求和:arr.sum(axis=0/1)np.sum(arr, axis=0/1)
(3)按行或列累加:arr.cumsum(axis=0/1)np.cumsum(arr, axis=0/1)

a = np.array([[32, 15, 6, 9, 14], 
              [12, 10, 5, 23, 1],
              [2, 16, 13, 40, 37]])

a.sum()						#  235		
np.sum(a)					# 235

a.sum(axis=0)				# 结果为:array([46, 41, 24, 72, 52])
np.sum(a,axis=1)			# 结果为:array([ 76,  51, 108])

a.cumsum(axis=0)			# 结果为:array([[32, 15,  6,  9, 14],[44, 25, 11, 32, 15],[46, 41, 24, 72, 52]])
np.cumsum(a,axis=1)			#  结果为:array([[ 32,  47,  53,  62,  76],[ 12,  22,  27,  50,  51],[  2,  18,  31,  71, 108]])
  • 求某一条件下数据的数量占总样本数量的百分比/概率:np.mean()
# 实际上,就是计算满足逻辑语句的值的百分比
class_year = np.array([1967, 1949, 2004, 1997, 1953, 1950, 1958, 1974, 1987, 2006, 2013, 1978, 1951, 1998, 1996, 1952, 2005, 2007, 2003, 1955, 1963, 1978, 2001, 2012, 2014, 1948, 1970, 2011, 1962, 1966, 1978, 1988, 2006, 1971, 1994, 1978, 1977, 1960, 2008, 1965, 1990, 2011, 1962, 1995, 2004, 1991, 1952, 2013, 1983, 1955, 1957, 1947, 1994, 1978, 1957, 2016, 1969, 1996, 1958, 1994, 1958, 2008, 1988, 1977, 1991, 1997, 2009, 1976, 1999, 1975, 1949, 1985, 2001, 1952, 1953, 1949, 2015, 2006, 1996, 2015, 2009, 1949, 2004, 2010, 2011, 2001, 1998, 1967, 1994, 1966, 1994, 1986, 1963, 1954, 1963, 1987, 1992, 2008, 1979, 1987])

millennials=np.mean(class_year > 2005)
print(millennials) 				# 0.2 即出生在2005年之后的人占总人数的20%
  • 求某个百分位上的数值:np.percentile(数组名,百分比)
b = np.array([1, 2, 3, 4, 4, 4, 6, 6, 7,  8, 8])
np.percentile(b, 40)			# 4.00
  • 求平均值:arr.mean()np.mean(arr)np.average(arr)

  • 求方差:np.var(arr)arr.var()

  • 求标准差:np.std(arr)arr.std()

  • 求中位数:np.median(arr)

  • 排序:

(1)np.sort(arr, axis, kind, order)arr.sort():在原数组上进行排序

参数说明:

a. 参数axis:默认值为1,即以行为单位从小到大排序
b. 参数kind:默认为’quicksort’(快速排序)

# 生成一个随机数组,先行排序,再列排序
a=np.array([[4, 3, 3, 2],
      		[2, 0, 5, 2],
      		[4, 2, 2, 1]])
a.sort()
a.sort(axis=0)

-----------------
# 结果为:
array([[2, 3, 3, 4],
       [0, 2, 2, 5],
       [1, 2, 2, 4]])
array([[0, 2, 2, 4],
       [1, 2, 2, 4],
       [2, 3, 3, 5]])       
可以看出来,连续的两个排序操作,后面一个是受到前面一个排序结果的影响;
这就是`np.sort(arr)`和`arr.sort()`的区别:
外部函数 np.sort() 是不会影响到原数组,总是返回一份拷贝;而 .sort() 方法则会更改原数组。

(2)np.argsort()arr.argsort():返回的是数组值从小到大的索引值,均不对原数组更改

a=np.array([[4, 3, 3, 2],
      		[2, 0, 5, 2],
      		[4, 2, 2, 1]])
a.argsort()
np.argsort(a,axis=0)

------------------
# 返回排序索引的结果为:
array([[3, 1, 2, 0],
       [1, 0, 3, 2],
       [3, 1, 2, 0]])
array([[1, 1, 2, 2],
       [0, 2, 0, 0],
       [2, 0, 1, 1]])       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值