python|numpy刷题——02

numpy错题整理02
文章目录

  • numpy错题整理02
    • 自我介绍
    • 资料来源
  • 刷题
    • Q2 摊平数组
    • Q4 维数位置交换
    • Q6. 去除多余的维数
    • Q7 合成数组
    • Q8 两个数组元素一一配对
    • Q10 切割向量
    • Q11 切割高维数组
    • Q14 数组重复
    • Q15 数组中的元素重复
    • Q16 去除数组中前面和后面的0
    • Q17 得到数组元素的直方图
  • 总结

干货在最后总结哦
自我介绍 我是深圳大学大三的一名大学生,未来想要从事数据分析的工作
从今天开始学习python相关库
第一步是学习numpy!!!
每天一节,加油!
这篇文章是我的第一篇博文,错题整理为个人复习用
资料来源 资料来源:https://github.com/fengdu78/Data-Science-Notes
刷题 Q2 摊平数组 Let x be array [[1, 2, 3], [4, 5, 6]]. Convert it to [1 4 2 5 3 6].
x = np.arange(1,7).reshape(2,3) print(x) # x.flatten(order='K') x.flatten('F') ''' order : {'C', 'F', 'A', 'K'}, optional 'C' means to flatten in row-major (C-style) order. 'F' means to flatten in column-major (Fortran- style) order. 'A' means to flatten in column-major order if `a` is Fortran *contiguous* in memory, row-major order otherwise. 'K' means to flatten `a` in the order the elements occur in memory. The default is 'C'. '''

flatten方法的参数order中,’C’代表行为主,‘F’代表列为主
Q4 维数位置交换 Let x be an arbitrary 3-D array of shape (3, 4, 5). Permute the dimensions of x such that the new shape will be (4,3,5).
x = np.arange(3*4*5).reshape([3,4,5]) print(x) out1 =np.reshape(x,[4,3,5]) out2 = np.swapaxes(x,1,0) np.allclose(out1,out2) print('out1:',out1) print('out2:',out2)

可以看到reshape和swapaxes两个函数得到的是不一样的
reshape保留原来的顺序
swapaxes则是交换两个坐标轴
Q6. 去除多余的维数 Let x be an arbitrary 3-D array of shape (3, 4, 1). Remove a single-dimensional entries such that the new shape will be (3, 4).
# help(np.squeeze) 利用squeeze函数 x=np.zeros([3,4,1]) # 不指定axis的话就会去除所有长度为1的轴 如果指定不是1的轴就会报错 # np.squeeze(x) # np.squeeze(x,axis=2)

Q7 合成数组 Lex x be an array
[[ 1 2 3]
[ 4 5 6].
and y be an array
[[ 7 8 9]
[10 11 12]].
Concatenate x and y so that a new array looks like
[[1, 2, 3, 7, 8, 9],
[4, 5, 6, 10, 11, 12]].
x = np.arange(1,7).reshape(2,3) y = np.arange(7,13).reshape(2,3) np.hstack((x,y)) #如果竖直合成 则使用hstack

Q8 两个数组元素一一配对 Let x be an array [1 2 3] and y be [4 5 6]. Convert it to [[1, 4], [2, 5], [3, 6]].
# help(np.dstack) x = np.array([1,2,3]) y = np.array([4,5,6]) np.dstack((x,y))

Q10 切割向量 Let x be an array [1, 2, 3, …, 9]. Split x into 3 arrays, each of which has 4, 2, and 3 elements in the original order.
x = np.arange(1,10) # l = [x[:4],x[4:6],x[6:]] # l np.split(x,[4,6])

Q11 切割高维数组 Let x be an array
[[[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.]],
[[ 8., 9., 10., 11.],
[ 12., 13., 14., 15.]]].
Split it into two such that the first array looks like
[[[ 0., 1., 2.],
[ 4., 5., 6.]],
[[ 8., 9., 10.],
[ 12., 13., 14.]]].
and the second one look like:
[[[ 3.],
[ 7.]],
[[ 11.],
[ 15.]]].
x = np.arange(16).reshape(-1,2,4) out1 = np.split(x,[3],axis=2) out_1

三维数组的顺序:页,行,列
Q14 数组重复 Let x be an array [0, 1, 2]. Convert it to
[[0, 1, 2, 0, 1, 2],
[0, 1, 2, 0, 1, 2]].
x = arange(3) np.tile(x,[2,2])

Q15 数组中的元素重复 Q15. Let x be an array [0, 1, 2]. Convert it to
[0, 0, 1, 1, 2, 2].
x=np.arange(3) np.repeat(x,2)

Q16 去除数组中前面和后面的0 Q16. Let x be an array [0, 0, 0, 1, 2, 3, 0, 2, 1, 0].
remove the leading the trailing zeros.
x = np.array([0, 0, 0, 1, 2, 3, 0, 2, 1, 0]) a = np.trim_zeros(x,trim ='bf')#参数trim中b代表后面,f代表前面 print(a) help(np.trim_zeros)

Q17 得到数组元素的直方图 【python|numpy刷题——02】Let x be an array [2, 2, 1, 5, 4, 5, 1, 2, 3]. Get two arrays of unique elements and their counts.
x = np.array([2, 2, 1, 5, 4, 5, 1, 2, 3]) np.unique(x,return_counts=True)

总结
  1. flatten作为ndarray对象的一个属性,有参数order,’C’为默认行为主,‘F’以列为主
  2. 交换高维数组的维数使用swapaxes函数,reshape运行结果一般不一样
  3. squeeze用于去除数量为1的维数
  4. hstack,vstack,dstack用于合成数组
  5. split用于切割数组
  6. 数组重复tile(以一个数组为整体开始重复),repeat(以单个元素开始重复)
  7. trim_zeros方法用于剪去前后的0,trim=‘bf’,b代表后,f代表前
  8. unique方法用于得到唯一的元素,而将return_counts置为True则还能得到各个元素的频数

    推荐阅读