numpy 19道练习题

比较简单

Posted by Hilda on March 12, 2025

numpy19题

题目列表

作业: 1、创建一个长度为10的一维全为0的ndarray对象,然后让第5个元素等于1

2、创建一个元素为从10到49的ndarray对象

3、将第2题的所有元素位置反转

4、使用np.random.random创建一个10*10的ndarray对象,并打印出最大最小元素

5、创建一个10*10的ndarray对象,且矩阵边界全为1,里面全为0

6、创建一个每一行都是从0到4的5*5矩阵

7、创建一个范围在(0,1)之间的长度为12的等差数列

8、创建一个长度为10的随机数组并排序

9、创建一个长度为10的随机数组并将最大值替换为0

10、创建一个5*5矩阵, 取其中的第三列进行排序?

11、给定一个4维矩阵,如何得到最后两维的和?

12、给定数组[1, 2, 3, 4, 5],如何得到在这个数组的每个元素之间插入3个0后的新数组?

13、给定一个二维矩阵,如何交换其中两行的元素?

14、创建一个100000长度的随机数组,使用两种方法对其求三次方,并比较所用时间

15、创建一个5*3随机矩阵和一个3*2随机矩阵,求矩阵积

16、矩阵的每一行的元素都减去该行的平均值

17、打印出以下函数(要求使用np.zeros创建8*8的矩阵):

1
2
3
4
5
6
7
8
[[0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]]

18、正则化一个5*5随机矩阵 正则的概念:假设a是矩阵中的一个元素,max/min分别是矩阵元素的最大最小值,则正则化后a = (a - min)/(max - min)

19、实现快速和选择排序法

参考答案

1、创建一个长度为10的一维全为0的ndarray对象,然后让第5个元素等于1

1
2
3
4
n = np.zeros(10)
display(n)
n[4] = 1
display(n)

image-20250312131304768

2、创建一个元素为从10到49的ndarray对象

1
2
n = np.arange(10,50)
display(n)

image-20250312131316586

3、将第2题的所有元素位置反转

1
2
n = n[::-1]
display(n)

image-20250312131327489

4、使用np.random.random创建一个10*10的ndarray对象,并打印出最大最小元素

1
2
3
4
n = np.random.random((10, 10))
display(n)
print(n.max())
print(n.min())

image-20250312131500536

5、创建一个10*10的ndarray对象,且矩阵边界全为1,里面全为0

1
2
3
4
5
n = np.zeros((10, 10))
n[[0, 9]] = 1
n[:, 0] = 1
n[:, 9] = 1
display(n)

image-20250312131939250

6、创建一个每一行都是从0到4的5*5矩阵

方法1:

1
2
3
vec = np.arange(0,5)
n = np.repeat(vec, 5).reshape(5, 5).T
display(n)

image-20250312132455911

方法2:

1
np.tile(np.arange(5), (5, 1))

image-20250312132547556

7、创建一个范围在(0,1)之间的长度为12的等差数列

1
np.linspace(0, 1, num = 12)

image-20250312132723817

8、创建一个长度为10的随机数组并排序

1
2
3
n = np.random.random((10,))
n = np.sort(n)
display(n)

image-20250312132937799

9、创建一个长度为10的随机数组并将最大值替换为0

1
2
3
4
n = np.random.random((10,))
display(n)
n[n.argmax()] = 0
display(n)

image-20250312133111595

10、创建一个5*5矩阵, 取其中的第三列进行排序?

1
2
3
4
n = np.random.random((5, 5))
display(n)
n[:, 2] = np.sort(n[:, 2])
display(n)

image-20250312133304935

11、给定一个4维矩阵,如何得到最后两维的和?

1
2
3
n = np.random.random((2,2,2,2))
display(n)
np.sum(n, axis=(2, 3))

image-20250312133556270

12、给定数组[1, 2, 3, 4, 5],如何得到在这个数组的每个元素之间插入3个0后的新数组?

1
2
3
4
n = np.array([1, 2, 3, 4, 5])
for i in range(1, len(n)):
    n = np.insert(n, (i-1)*4+1, [0,0,0])
display(n)

image-20250312150346837

13、给定一个二维矩阵,如何交换其中两行的元素?

1
2
3
4
n = np.arange(1, 10).reshape(3, 3)
display(n)
n = n[[1, 0, 2]]  # 交换前2行
display(n)

image-20250312150609913

14、创建一个100000长度的随机数组,使用两种方法对其求三次方,并比较所用时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import time
n = np.random.random((100000,))
display(n)
print("n的形状:", n.shape)

n1 = n.copy()
n2 = n.copy()

# 方法1
def cube(x):
    return x**3
time1 = time.time()
cube_vectorized = np.vectorize(cube)
n1 = cube_vectorized(n1)
time2 = time.time()
print("时间1:",time2-time1)
display(n1)
print("三次方之后,形状是:", n1.shape)

# 方法2:
time3 = time.time()
n2 = n2**3
n2 = np.array(n2)
time4 = time.time()
print("时间2:",time4-time3)
display(n2)
print("三次方之后,形状是:", n2.shape)

image-20250312151453028

15、创建一个5*3随机矩阵和一个3*2随机矩阵,求矩阵积

1
2
3
4
5
n1 = np.random.random((5, 3))
n2 = np.random.random((3, 2))
n3 = n1@n2
display(n3)
print(n3.shape)

image-20250312151620368

16、矩阵的每一行的元素都减去该行的平均值

1
2
3
4
5
n = np.arange(1, 10).reshape(3, 3)
display(n)
n_mean = n.mean(axis = 1, keepdims=True)
n = n - n_mean
display(n)

image-20250312151850445

17、打印出以下函数(要求使用np.zeros创建8*8的矩阵):

1
2
3
4
5
6
7
8
[[0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]
 [0 1 0 1 0 1 0 1]
 [1 0 1 0 1 0 1 0]]
1
2
3
4
arr = np.zeros((8,8))
arr[1::2, ::2] = 1  # 奇数行,偶数列
arr[::2, 1::2] = 1  # 偶数行,奇数列
display(arr)

image-20250312152220745

注:上面的代码利用的是切片:

  • arr[1::2, ::2] = 1:
    • 1::2: 从索引 1 开始,每隔一行选择一行(即选择奇数行:1, 3, 5, 7)。
    • ::2: 从索引 0 开始,每隔一列选择一列(即选择偶数列:0, 2, 4, 6)。
    • 这行代码将奇数行偶数列的元素设置为 1。

18、正则化一个5*5随机矩阵 正则的概念:假设a是矩阵中的一个元素,max/min分别是矩阵元素的最大最小值,则正则化后a = (a - min)/(max - min)

1
2
3
4
5
a = np.arange(1, 26).reshape(5, 5)
display(a)

a = (a - a.min())/(a.max() - a.min())
display(a)

image-20250312152513858

19、实现快速和选择排序法

快速排序:

1
2
3
4
5
6
7
8
9
10
11
def quickSort(n):
    if n.size <= 1:
        return n
    pivot = n[n.size // 2]
    left = n[n < pivot]
    middle = n[n == pivot]
    right = n[n > pivot]
    return np.concatenate((quickSort(left), middle, quickSort(right)))

arr = np.array([4,3,6,2,9,1])
display(quickSort(arr))

image-20250312153152291

选择排序:

1
2
3
4
5
6
7
8
9
10
def selectSort(n):
    for i in range(n.size):
        min_index = i
        for j in range(i, n.size):
            if n[j] < n[min_index]:
                min_index = j
        n[i], n[min_index] = n[min_index], n[i]
arr = np.array([4,3,6,2,9,1])
selectSort(arr)
display(arr)

image-20250312153618345