数据分析与可视化 实践基础练习二(NumPy)


一、Numpy相关函数或属性

  • 数组的索引和切片
  • 数组的运算

1.Numpy的一元函数

img-202303091942166 img-202303091944208.png

2.Numpy的二元函数

img-202303091944093
  • 数组的读/写

1.np.savetxt() 和np.loadtxt()
np.savetxt() np.loadtxt()只能有效存取一维和二维数组

(1). np.savetxt()

img-202303121252720 img-202303121253508

(2). np.loadtxt()

img-202303121255236 img-202303121255615

2.tofile() 和 np.fromfile()
任意维度的存取, 该方法需要读取时知道存入文件时数组的维度和元素类型

(1). tofile()

Snipaste_2023-03-12_12-59-29 Snipaste_2023-03-12_13-01-22

(2). np.fromfile()

Snipaste_2023-03-12_12-59-40 img-202303121318728

3.np.save()、np.savez() 和np.load()
numpy的便捷文件存取

(1). np.save() 和 np.load()

Snipaste_2023-03-12_13-07-42 Snipaste_2023-03-12_13-07-57

(2). np.savez()

1
np.savez(file, *args, **kwds)

以未压缩的.npz 格式将多个数组保存到一个文件中。

提供数组作为关键字参数,以将它们存储在输出文件中的相应名称下:savez(fn, x=x, y=y)


二、练习题

  1. 从数组np.arange(15)中提取5到10之间的所有数字 .

  2. 交换数组np.arange(9).reshape(3,3)中的第1列和第2列.

  3. 交换数组np.arange(9).reshape(3,3)中的第1行和第2行.

  4. 获取数组a = np.array([1,2,3,2,3,4,3,4,5,6])和数组b = np.array([7,2,10,2,7,4,9,4,9,8])之间的共同元素.

  5. 查找数组np.array([1,2,3,2,3,4,3,4,5,6])中的唯一值的数量.

  6. 查找二维数组np.arange(9).reshape(3,3)每一行中的最大值.

  7. 计算数组a = np.array([1,2,3,2,3,4,3,4,5,6])和数组b = np.array([7,2,10,2,7,4,9,4,9,8])之间的欧式距离.

  8. 查找数组np.array([7,2,10,2,7,4,9,4,9,8])中的第二大值.


三、题解

1
2
3
4
5
6
# 1.从数组np.arange(15)中提取5到10之间的所有数字 

import numpy as np

a = np.arange(15)
print('a:',a[5:11])
a: [ 5  6  7  8  9 10]

1
2
3
4
5
6
7
# 2.交换数组np.arange(9).reshape(3,3)中的第1列和第2列

import numpy as np

a = np.arange(9).reshape(3,3)
a[ : , [0,1]] = a[ : , [1,0]] # [ : , [0,1]]表示得到第一列和第二列的所有元素值,交换列数下标即可
print(a)
[[1 0 2]
 [4 3 5]
 [7 6 8]]

1
2
3
4
5
6
7
# 3.交换数组np.arange(9).reshape(3,3)中的第1行和第2行

import numpy as np

a = np.arange(9).reshape(3,3)
a[[0,1], : ] = a[[1,0], : ] # [[0,1], : ]表示得到第一行和第二行的所有元素值,交换行数下标即可
print(a)
[[3 4 5]
 [0 1 2]
 [6 7 8]]

1
2
3
4
5
6
7
8
# 4.获取数组a = np.array([1,2,3,2,3,4,3,4,5,6])和数组b = np.array([7,2,10,2,7,4,9,4,9,8])之间的共同元素

import numpy as np

a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])
c = np.intersect1d(a,b) # np.intersect1d()会返回两个数组中的共同元素,并且排序后输出
print(c)
[2 4]

1
2
3
4
5
6
7
8
9
# 5.查找数组np.array([1,2,3,2,3,4,3,4,5,6])中的唯一值的数量

import numpy as np

a = np.array([1,2,3,2,3,4,3,4,5,6])
unique_words, counts = np.unique(a, return_counts=True) # 使用np.unique()会返回数组中的唯一值(去重)
# 加上return_counts参数会返回去重后的数组及相应的出现的频次(数量用counts来接收)
print(unique_words)
print(counts)
[1 2 3 4 5 6]
[1 2 3 2 1 1]

1
2
3
4
5
6
7
8
# 6.查找二维数组np.arange(9).reshape(3,3)每一行中的最大值

import numpy as np
a = np.arange(9).reshape(3,3)
print(a[ : , 2 : ]) # 数组已经有序,直接进行切片
max = np.max(a, axis = 1) # 或者利用np.max()方法,axsi = 1表示会对每一行做操作,沿着数组的第二维度(列)来取最大值
#(同理axis=0,就会取到每一列的最大值)
print(max)
[[2]
 [5]
 [8]]
[2 5 8]

1
2
3
4
5
6
7
8
9
10
# 7.计算数组a = np.array([1,2,3,2,3,4,3,4,5,6])和数组b = np.array([7,2,10,2,7,4,9,4,9,8])之间的欧式距离

import numpy as np
a = np.array([1,2,3,2,3,4,3,4,5,6])
b = np.array([7,2,10,2,7,4,9,4,9,8])

dist1 = np.sqrt(np.sum(np.square(a - b))) # 欧式距离计算方式一,参数是numpy向量
dist2 = np.linalg.norm(a - b) # 方式二
print(dist1)
print(dist2)
12.529964086141668
12.529964086141668

1
2
3
4
5
6
7
# 8.查找数组np.array([7,2,10,2,7,4,9,4,9,8])中的第二大值

import numpy as np
a = np.array([7,2,10,2,7,4,9,4,9,8])
b = np.sort(a) # 对原数组进行升序排序,输出倒数第二个值即可
print(b)
print(b[-2])
[ 2  2  4  4  7  7  8  9  9 10]
9

四、参考文章

np.savez用法及代码示例

Python+NumPy交换数组的两行或者两列

如何获取数组a和b之间的共元素

NumPy 获取唯一元素、出现次数、展平数组

如何找到二维数组每一列中的最大值

numpy中计算数组之间的欧式距离