#学习笔记#
在学习神经网络的过程中发现对numpy的操作不是非常熟悉,遂找到了Numpy 100题。
Git-hub链接
目录
1 题目列表:
2 题解:
1 题目列表:
-
导入numpy包,并将其命名为
np
(★☆☆) -
打印numpy版本和配置信息(★☆☆)
-
创建一个大小为10的空向量(★☆☆)
-
如何找出任何数组的内存大小(★☆☆)
-
如何从命令行获取numpy add函数的文档?(★☆☆)
-
创建一个大小为10的空向量,但第五个值为1(★☆☆)
-
创建一个包含从10到49的值的向量(★☆☆)
-
反转向量(第一个元素变成最后一个)(★☆☆)
-
创建一个3x3矩阵,其值范围从0到8(★☆☆)
-
从[1,2,0,0,4,0]中找出非零元素的索引(★☆☆)
-
创建一个3x3的单位矩阵(★☆☆)
-
创建一个3x3x3的数组,包含随机值(★☆☆)
-
创建一个10x10的数组,包含随机值,并找出最小值和最大值(★☆☆)
-
创建一个大小为30的随机向量,并找出平均值(★☆☆)
-
创建一个2d数组,边界为1,内部为0(★☆☆)
-
如何在现有数组周围添加一个由0填充的边界?(★☆☆)
-
下列表达式的结果是什么?(★☆☆)
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题
以上
学习在于行动,总结和坚持,共勉