【Numpy】练习题100道(1-25题)

🌻个人主页:相洋同学
🥇学习在于行动、总结和坚持,共勉!

#学习笔记#

在学习神经网络的过程中发现对numpy的操作不是非常熟悉,遂找到了Numpy 100题。

Git-hub链接

目录

1 题目列表:

2 题解:


1 题目列表:

  1. 导入numpy包,并将其命名为np(★☆☆)

  2. 打印numpy版本和配置信息(★☆☆)

  3. 创建一个大小为10的空向量(★☆☆)

  4. 如何找出任何数组的内存大小(★☆☆)

  5. 如何从命令行获取numpy add函数的文档?(★☆☆)

  6. 创建一个大小为10的空向量,但第五个值为1(★☆☆)

  7. 创建一个包含从10到49的值的向量(★☆☆)

  8. 反转向量(第一个元素变成最后一个)(★☆☆)

  9. 创建一个3x3矩阵,其值范围从0到8(★☆☆)

  10. 从[1,2,0,0,4,0]中找出非零元素的索引(★☆☆)

  11. 创建一个3x3的单位矩阵(★☆☆)

  12. 创建一个3x3x3的数组,包含随机值(★☆☆)

  13. 创建一个10x10的数组,包含随机值,并找出最小值和最大值(★☆☆)

  14. 创建一个大小为30的随机向量,并找出平均值(★☆☆)

  15. 创建一个2d数组,边界为1,内部为0(★☆☆)

  16. 如何在现有数组周围添加一个由0填充的边界?(★☆☆)

  17. 下列表达式的结果是什么?(★☆☆)

0 * np.nan
np.nan == np.nan
np.inf > np.nan
np.nan - np.nan
np.nan in set([np.nan])
0.3 == 3 * 0.1

18. 创建一个5x5矩阵,在对角线下方填充值1,2,3,4(★☆☆)

19.创建一个8x8矩阵,并用棋盘图案填充(★☆☆)

20.考虑一个形状为(6,7,8)的数组,第100个元素的索引(x,y,z)是什么?(★☆☆)

21.使用tile函数创建一个8x8的棋盘矩阵(★☆☆)

22.规范化一个5x5的随机矩阵(★☆☆)

23.创建一个自定义dtype,用以描述颜色为四个无符号字节(RGBA)(★☆☆)

24.将一个5x3矩阵乘以一个3x2矩阵(真正的矩阵乘法)(★☆☆)

25.给定一个1D数组,原地将所有在3到8之间的元素取反。(★☆☆)

2 题解:

1.导入numpy包,并将其命名为np(★☆☆)

import numpy as np

2.打印numpy版本和配置信息(★☆☆)

print(np.__version__)
print(np.show_config())

3.创建一个大小为10的空向量(★☆☆)

null_vector = np.zeros(10)
type(null_vector)

4.如何找出任何数组的内存大小(★☆☆)

# 使用nbytes属性(以字节为单位)
arr = null_vector
print(arr.nbytes)

5.如何从命令行获取numpy add函数的文档?(★☆☆)

# 在命令行中需要先激活python环境,然后import numpy,最后help(numpy.add)即可
help(np.add)

6.创建一个大小为10的空向量,但第五个值为1(★☆☆)

null_vector = np.zeros(10)
null_vector[4] = 1    # 注意索引是从0开始的

7.创建一个包含从10到49的值的向量(★☆☆)

# 我第一时间想到了这种方法,使用列表推导式
vector = np.array([i for i in range(10,50)])
# 但实际上numpy提供了更直接高效的方式,就是使用np.arange函数

8.反转向量(第一个元素变成最后一个)(★☆☆)

vector = np.array([1,2,3,4,5])
reversed_vector = vector[::-1]    # 直接用列表的切片操作

9.创建一个3x3矩阵,其值范围从0到8(★☆☆)

matrix = np.arange(0,9).reshape(3,3)   # reshape方法可以重新整形,结合上面的arange方法即可实现
# 注意,使用该方法的对象如果不满足数量,这里如果!=9就会报错

10.从[1,2,0,0,4,0]中找出非零元素的索引(★☆☆)

vector = np.array([1,2,0,0,4,0])
non_zero_indices = np.nonzero(vector)     # 相比于循环来说,这种内部的方法更加稳定高效

11.创建一个3x3的单位矩阵(★☆☆)

identity_matrix = np.eye(3)     # eye方法

12.创建一个3x3x3的数组,包含随机值(★☆☆)

random_array = np.random.rand(3,3,3)    # 使用random.rand方法生成

13.创建一个10x10的数组,包含随机值,并找出最小值和最大值(★☆☆)

random_array = np.random.rand(10,10)
max_value = np.max(random_array)            # 使用numpy内置的max,min方法
min_value = np.min(random_array)

14.创建一个大小为30的随机向量,并找出平均值(★☆☆)

random_vector = np.random.rand(30)
mean_value = np.mean(random_vector)

15.创建一个2d数组,边界为1,内部为0(★☆☆)

array_size = 5  # 可根据需要调整大小
array = np.ones((array_size,array_size))    # 需要传入一个shape,需要为元组
array[1:-1,1:-1] = 0           #  应用了切片和广播机制

16.如何在现有数组周围添加一个由0填充的边界?(★☆☆)

original_array = np.ones((3,3))
padded_array = np.pad(original_array,pad_width = 1,mode = 'constant',constant_values=0)
# pad_width = 1 指定了边框的宽度为1(即在每个方向上添加一层0)
# mode = 'constant'指定了填充模式为常量值填充,contant_values=0,定义了这个常量值为0

17.下列表达式的结果是什么?(★☆☆)

0 * np.nan
np.nan == np.nan
np.inf > np.nan
np.nan - np.nan
np.nan in set([np.nan])
0.3 == 3 * 0.1
np.nan     # NaN与任何数字运算结果还是NaN
False          # 在IEEE浮点数标准中,NaN被认为不等于自身
False           # NaN与任何数比较都是False
np.nan         # NaN与任何数的算术运算结果还是NaN
True            # 虽然NaN不等于自身,但是可以在集合中检测到它的存在
False           # 这个表达式确实会先运算*但是由于浮点数的精度问题,‘3*0.1’实际上并不精确等于0.3

18. 创建一个5x5矩阵,在对角线下方填充值1,2,3,4(★☆☆)

matrix = np.zeros((5,5))
np.fill_diagonal(matrix[1:],range(1,5))
# fill_diagonal可以填充数组对角线

19.创建一个8x8矩阵,并用棋盘图案填充(★☆☆)

# 初始化一个8x8的全零矩阵
chessboard = np.zeros((8, 8), dtype=int)

# 用1填充棋盘格模式
# 偶数行的奇数列以及奇数行的偶数列
chessboard[1::2, ::2] = 1  # 奇数行,偶数列
chessboard[::2, 1::2] = 1  # 偶数行,奇数列

20.考虑一个形状为(6,7,8)的数组,第100个元素的索引(x,y,z)是什么?(★☆☆)

(1,5,3)
# 100 / 8 = 12 余 4   (代表在第十三行,第四个位置,第四个位置(列)索引为3)
# 13 / 7 = 1 余 6   (代表在第二个矩阵中的第6行,第六行索引为5)
# 2 / 6 = 0 余 2   (第二个矩阵中,索引为1)

21.使用tile函数创建一个8x8的棋盘矩阵(★☆☆)

chessboard_unit = np.array([[0,1],[1,0]])
chessboard = np.tile(chessboard_unit,(4,4))
# 当调用‘np.tile(A,reps)’时,‘A’是你想要重复的数组,而‘reps’指示了‘A’在各个维度上应该被重复的次数。如果‘reps’是一个整数,则‘A’将在所有轴上重复这个次数。如果是一个数组,则会在指定轴上重复。就像贴瓷砖一样

22.规范化一个5x5的随机矩阵(★☆☆)

matrix = np.random.rand(5,5)

# 方法一,最大最小归一化
min_val = matrix.min(axis = 0)   # 对列进行操作;对行操作时使用axis = 1
max_val = matrix.max(axis = 0)   # 在对列操作时,需要设置keepdims = True
normalized_matrix = (matrix - min_val)/(max_val - min_val)

# 方法二,Z-score标准化(也称标准差标准化)
mean = np.mean(matrix,axis = 0)   # 对列进行操作
std = np.std(matrix,axis = 0)
z_normalized_matrix = (matrix - mean) / std

23.创建一个自定义dtype,用以描述颜色为四个无符号字节(RGBA)(★☆☆)

import numpy as np

# 定义一个自定义的dtype来描述颜色
color_dtype = np.dtype([
    ("r", np.uint8),  # 红色分量
    ("g", np.uint8),  # 绿色分量
    ("b", np.uint8),  # 蓝色分量
    ("a", np.uint8)   # 透明度分量
])

# 创建一个使用该dtype的数组示例
color_example = np.array([(255, 0, 0, 255), (0, 255, 0, 255)], dtype=color_dtype)

24.将一个5x3矩阵乘以一个3x2矩阵(真正的矩阵乘法)(★☆☆)

matrix1 = np.random.rand(5,3)
matrix2 = np.random.rand(3,2)
dot_matrix = np.dot(matrix1,matrix2)

25.给定一个1D数组,原地将所有在3到8之间的元素取反。(★☆☆)

vector = np.random.rand(9)
# 位置3到8的元素取反
vector[3:9] *= -1

# 将值3到8取反
vector_range = np.arange(10)
vector_range[(vector_range>3) & (vector_range<8)] *= -1

后续会更行全部100题

以上

学习在于行动,总结和坚持,共勉

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值