实验楼 - Python Numpy 100题实验(七)

这一部分主要内容有:

  • 对数组缺失值的一些处理
  • numpy.unique()函数
  • 一些统计函数的使用

找出数组中的缺失值的总数以及所在的位置

首先创建一个含有缺失值的数组在进行处理:

a = np.random.rand(10, 10)
#首先创建数组
a[np.random.randint(10, size=5), np.random.randint(10, size=5)] = np.nan
#随机指定数组中的五个位置为缺失值

print('Array a:')
print(a)
print('Result:')
#计算缺失值的总数
print(np.isnan(a).sum())
#返回缺失值的位置
print(np.where(np.isnan(a)))

输出:

Array a:
[[0.31083684 0.91010211 0.04155175 0.39559228 0.5232661  0.55171089
  0.38759503 0.18378685 0.10009486 0.52620333]
 [0.0010178  0.94765918 0.51306455 0.48942569 0.90026993 0.14719501
  0.93473118 0.13998178 0.14924952 0.39719853]
 [0.40373739 0.57648616 0.83931134 0.59873777 0.18590857 0.32391626
  0.38614168 0.9713498         nan 0.95889986]
 [0.1717263  0.71885529 0.70497483 0.81978594 0.02236966 0.79265399
  0.73746451 0.93370094 0.84984392 0.11840724]
 [0.19580231 0.10166299 0.80148874 0.33659768 0.98157772 0.28165397
  0.7584942  0.19303689 0.46656634        nan]
 [0.93393161 0.07945731 0.67380011 0.85559426 0.66762445 0.83854581
         nan 0.27080165 0.55020945 0.44349568]
 [0.66901709 0.20291176        nan 0.88576954 0.20965868 0.12452639
  0.30308387 0.10114764 0.16775824 0.16670271]
 [0.68666214 0.80949253 0.67494937 0.64263024 0.46793965 0.03839704
  0.22540187 0.50151825 0.24351516 0.8102747 ]
 [0.02620325 0.77708875 0.3448256  0.02586994 0.94095425 0.03868308
  0.07316849 0.61268636 0.41412048 0.96585309]
 [0.49981582 0.54435733 0.09576101 0.80670774 0.80234424 0.90126886
  0.53148287        nan 0.71743648 0.04258146]]
Result:
5
(array([2, 4, 5, 6, 9], dtype=int64), array([8, 9, 6, 2, 7], dtype=int64))

从随机数组中删除包含缺失值的行

答案中给的方式没搞懂(汗…)附上自己的答案,就在于delete函数的使用:

对于numpy.delete()函数:

调用格式:numpy.delete(array, index, axis)

  • array:就是要进行删除操作的数组
  • index:可以是一个值,表示删除某一行(列),也可以传入一个列表,表示删除多行
  • axis:这个参数就跟之前一个意思,指定删除的是行或者列,axis=0表示行,axis=1表示列
a = np.random.rand(5,5)
a[np.random.randint(1, 5, 3), np.random.randint(1, 5, 3)] = np.nan
print('Array a:')
print(a)
#a[np.sum(np.isnan(a), axis=1) == 0]
a = np.delete(a, np.where(np.isnan(a))[0], axis=0)
print('Result:')
print(a)

输出:

Array a:
[[7.68869910e-01 5.93522024e-01 1.74886116e-01 3.20411298e-01
  9.65866122e-01]
 [2.81333529e-01 5.01416814e-01 1.09475874e-01            nan
  1.47391379e-01]
 [7.45582548e-01            nan 4.07239843e-01 3.58272081e-01
  1.09239464e-01]
 [1.94400883e-01 1.03118456e-01 4.27904384e-01            nan
  9.25303679e-01]
 [4.06984125e-04 5.16657702e-01 2.07785888e-01 8.62155280e-01
  4.88154880e-01]]
Result:
[[7.68869910e-01 5.93522024e-01 1.74886116e-01 3.20411298e-01
  9.65866122e-01]
 [4.06984125e-04 5.16657702e-01 2.07785888e-01 8.62155280e-01
  4.88154880e-01]]

统计随机数组中个元素的数量

使用的numpy.unique()函数,这个函数我们一般用于剔除数组中的重复元素,并返回一个排好序的数组。

a = np.random.randint(1, 10, 5)
print('Array A:')
print(a)
print('Result:')
print(np.unique(a, return_counts = True))

输出:

Array A:
[4 7 1 7 1]
Result:
(array([1, 4, 7]), array([2, 1, 2], dtype=int64))

返回的第一个数组是原来数组的值,后一个数组则是每个元素对应的计数值。

将数组中个元素按指定的分类转换为文本值

首先建立一个字典,然后按照列表解析的方式对遍历数组即可

a = np.random.randint(1, 4, 5)
label_map = {1:'汽车',2:'火车',3:'自行车'}
b = [label_map[i] for i in a]
print('Array A:')
print(a)
print('Resutl:')
print(b)

输出:

Array A:
[3 2 2 1 2]
Resutl:
['自行车', '火车', '火车', '汽车', '火车']

将多个1维数组拼合为单个Narray

a = np.random.randint(1, 10, 5)
b = np.random.randint(1, 10, 5)
c = np.random.randint(1, 10, 4)
d = np.array([a, b, c])
print(d)
print(np.concatenate(d))

输出:

[array([5, 7, 1, 6, 7]) array([1, 9, 6, 4, 3]) array([4, 5, 4, 6])]
[5 7 1 6 7 1 9 6 4 3 4 5 4 6]

打印数组中个元素在升序排序中的索引数组

对数组的索引进行操作的函数基本都是arg打头的:

a = np.random.randint(1, 10, 5)
print('Array a:')
print(a)
print('Result:')
print(a.argsort())

输出:

Array a:
[3 2 7 7 3]
Result:
[1 0 4 2 3]

输出二位随机数组的各行的最大值

a = np.random.randint(1, 10, (3,3))
print('Array a:')
print(a)
print('Result:')
print(np.max(a, axis=1))

输出:

Array a:
[[7 2 6]
 [1 4 1]
 [4 2 9]]
Result:
[7 4 9]

计算两个数之间的欧式距离

其实就是我们通常所说的两点之间的距离公式:

pa = np.array([1,2])
pb = np.array([3,4])

dis = np.sqrt(np.power((pb[0]-pa[0]),2) + np.power((pb[1]-pa[1]),2))
print(dis)

输出:

2.8284271247461903

打印复数的实部以及虚部

a = np.array([1+2j, 3+4j, 5+6j])
print(a.real)
print(a.imag)

输出:

[1. 3. 5.]
[2. 4. 6.]

猜你喜欢

转载自blog.csdn.net/sinat_34328764/article/details/82998463