numpy100道练习题

numpy100道练习题

原题目可以在此处找到,链接:https://github.com/rougier/numpy-100/blob/master/100_Numpy_exercises.md

本文只摘选了一部分习题进行讲解,题号和原题号对应。

  1. 创建一个三乘三乘三的随机矩阵/Create a 3x3x3 array with random values (★☆☆)
    很多场景需要随机值,用来测定方法或者模拟实际。numpy.random模块给出了这样功能。
import numpy as np
Z = np.random.random((3,3,3))
print(Z)
  1. Create a 10x10 array with random values and find the minimum and maximum values (★☆☆) 创建10*10的随机值矩阵,并找出最大值和最小值
import numpy as np
Z = np.random.random((10,10))
Zmin, Zmax = Z.min(), Z.max()
print(Zmin, Zmax)
  1. Create a random vector of size 30 and find the mean value (★☆☆)创建一个长度为30的矢量,并找出均值
import numpy as np
Z = np.random.random(30)
m = Z.mean()
print(m)
  1. 创建一个中心是边界值为1而内部都是0的数组/Create a 2d array with 1 on the border and 0 inside (★☆☆)
    本题再次用到numpy的切片原理。多维数组同样遵循x[start:stop:step]的原理。解此题可以先把所有值都设置为1,这是大正方形;其次,把边界除外小正方形全部设置为0,本题就解决了。

方法一:

import numpy as np
Z = np.ones((10, 10))
Z[1:-1, 1:-1] = 0
print(Z)

方法二:

import numpy as np
Z = np.ones((10, 10))
Z[1:9, 1:9] = 0
print(Z)

方法三:

import numpy as np
Z = np.zeros((5, 5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=1)
print(Z)
  1. How to add a border (filled with 0’s) around an existing array? (★☆☆)
    把存在的矩阵,加上数值为0的边界把存在的矩阵,加上数值为0的边界
Z = np.ones((5,5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
print(Z)
  1. Create a 5x5 matrix with values 1,2,3,4 just below the diagonal (★☆☆)
    在对角线下方创建一个值为1,2,3,4的5x5矩阵在对角线下方创建一个值为1,2,3,4的5x5矩阵
import numpy as np
Z = np.diag(1+np.arange(4), k=1)  #k为偏移量,k=-1,表示斜对角线的下方,k=1,表示斜对角线的上方,k=0,无偏移
print(Z)
  1. 创建一个8×8的棋盘格Create a 8×8 matrix and fill it with a checkerboard pattern (★☆☆)

棋盘格是交错的数值。实际还是用到多维数组的切片原理。在多维数组的切片中,a(m,n),a[start:stop:step,start:stop:step],两个参数分别是行列限制。分三个步骤,第一设置一个8*8的空值,第二步把第一行隔一列设置1,每两行两列同样,第三步类似第二部,不过是从第二行开始,错开。

import numpy as np
Z = np.zeros((8, 8), dtype=int)
Z[1::2, ::2] = 1
Z[::2, 1::2] = 1
print(Z)

  1. 使用tile功能创建一个棋盘格/Create a checkerboard 8×8 matrix using the tile function (★☆☆)
    np.tile(A, reps)解释为Construct an array by repeating A the number of times given by reps。这个功能是矩阵复制构造,其中reps可以是矩阵。从解题思路上看,只要构造一个1,0,0,1的二乘二的矩阵,再进行四次行列的复制。
import numpy as np
Z = np.tile( np.array([[0,1],[1,0]]), (4,4))
print(Z)
  1. 归一化一个随机的5*5矩阵/Normalize a 5×5 random matrix (★☆☆)

找出最大值和最小值,然后把最大值和最小值分别用1和0表示,其他值则反映在0和1中间。

import numpy as np
Z = np.random.random((5, 5))
Zmax, Zmin = Z.max(), Z.min()
Z = (Z - Zmin)/(Zmax - Zmin)
print(Z)
  1. Create a custom dtype that describes a color as four unsigned bytes (RGBA) (★☆☆)
    创建一个自定义dtype,将颜色描述为四个无符号字节(RGBA)创建一个自定义dtype,将颜色描述为四个无符号字节(RGBA)
import numpy as np
color = np.dtype([("r", np.ubyte, 1),  # dtype结构化数据类型
                  ("g", np.ubyte, 1),
                  ("b", np.ubyte, 1),
                  ("a", np.ubyte, 1)])
print(color)
  1. Multiply a 5x3 matrix by a 3x2 matrix (real matrix product) (★☆☆)
    5乘3的矩阵和3乘2的实矩阵相乘。 5乘3的矩阵和3乘2的实矩阵相乘。
import numpy as np
Z = np.dot(np.ones((5, 3)), np.ones((3, 2)))  # ones((5,3)),里面的括号容易忘
print(Z)
  1. Given a 1D array, negate all elements which are between 3 and 8, in place. (★☆☆)
    给定一维数组,所有在3到8之间的元素取负数。给定一维数组,所有在3到8之间的元素取负数。
import numpy as np
Z = np.arange(11)
Z[(3 < Z) & (Z < 8)] *= -1
print(Z)

你可能感兴趣的:(Python,深度不学习)