numpy 矩阵拼接_NumPy进阶80题完整版

前言

大家好,NumPy进阶修改80题现在已经全部更新完毕,80道习题涵盖了NumPy中数组创建、访问、筛选、修改、计算等常用操作,如果不熟悉NumPy的读者可以刷一遍,因为里面的代码大多拿走就能用,所以如果你已经了解NumPy的基本操作,我更建议将这80题当成速查手册使用,随用随查!

NumPy进阶修炼80题完整版

01 数据查看 题目:导入并查看NumPy版本 难度:⭐ 答案
import numpy as np
print(np.__version__)
备注:你需要关注你的NumPy版本,部分方法会随着版本更新而变化 02 数据创建 题目:创建十个全为0的一维数组 难度:⭐ 期望结果
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
答案
np.zeros(10)
03 数据创建 题目:创建10个全为0的一维数据并修改数据类型为整数 难度:⭐ 答案
np.zeros(10,dtype = 'int')
04 数据创建 题目: 创建20个0-100固定步长的数 难度:⭐ 期望答案
array([ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80,
       85, 90, 95])
答案
np.arange(0,100,5)
05 数据创建 题目:从list创建数组 难度:⭐ 输入
List = [1,2,3,4,5,6,7,8,9]
答案
result = np.array(List)
06 数据创建 题目:创建一个三行三列全是1的矩阵 难度:⭐ 答案
#方法1
np.ones((3,3))
#方法2
np.array([[ 1., 1., 1.],
       [ 1., 1., 1.],
       [ 1., 1., 1.]])
07 数据创建 题目:创建一个2行2列矩阵并且元素为布尔类型的True 难度:⭐⭐ 期望结果
array([[ True, True],
       [ True, True]])
答案
np.full((2,2), True, dtype=bool)
08 数据创建 题目:创建等差数列 备注 :从5开始,50结束,共10个数据 难度:⭐ 答案
np.linspace(start=5,stop=50,num=10)
09 数据创建 题目:创建等差数列 备注1:从5开始,50结束,共10个数据,数据类型为int32 难度:⭐⭐ 答案
np.arange(start = 5, stop = 55, step = 5,dtype = 'int32')

备注2:思考与上一题的不同

10 数据创建 题目:创建3x3矩阵 备注:矩阵元素均为0—10之间的随机数 难度:⭐ 答案
np.random.randint(0,10,(3,3))
11 数据创建 题目:创建3x3矩阵 备注:矩阵元素均为服从标准正态分布的随机数 难度:⭐ 答案
np.random.randn(3, 3)
12 数据重塑 题目:将第五题的result修改为3x3矩阵 难度:⭐ 答案
result = result.reshape(3,3)
13 数据修改 题目:对上一题生成的result取转置 难度:⭐ 答案
result.T
14 数据查看 题目:查看result的数据类型 难度:⭐ 答案
result.dtype
#dtype('int64')
15 数据查看 题目:查看result的内存占用 难度 :⭐ 备注 :直接查看或手动计算  答案
#方法一:直接查看
result.nbytes
#方法2
手动计算
result.itemsize * 9
#72
16 数据创建 题目:将result的数据类型修改为float 难度:⭐ 答案
result = result.astype(float)
17 数据提取 题目:提取result第三行第三列的元素 难度:⭐ 答案
result[2,2]
18 数据修改 题目:将result第三行第三列的元素放大十倍 难度:⭐ 答案
result[2,2] = result[2,2] * 10
19 数据提取 题目:提取result中的所有偶数 难度:⭐⭐ 期望输出
array([ 2., 4., 6., 8., 90.])
答案
result[result % 2 == 0]
20 数据修改 题目:将result中所有奇数修改为666 难度:⭐⭐ 答案
result[result % 2 == 1] = 666
21 数据创建 题目: 创建主对角线都是5的5x5矩阵 难度:⭐ 答案
result = np.diag([5,5,5,5,5])
22 数据修改 题目:交换第一列与第二列 难度:⭐⭐ 答案
a = result[:, [1,0,2,3,4]]
23 数据修改 题目:交换第一行与第二行 难度:⭐⭐ 答案
result[result % 2 == 1] = 666
24 数据查看 题目:判断两个矩阵是否有任何元素不同 难度:⭐⭐ 答案
print((a == b).all())
25 数据计算 题目:计算两个矩阵不同元素的个数 难度:⭐⭐ 答案
len(np.argwhere(a != b))
26 数据查看 题目:找到两个矩阵不同元素的位置 难度:⭐⭐ 答案
np.argwhere(a != b)
27 数据计算 题目:对a和b做矩阵乘法 难度:⭐⭐ 答案
np.dot(a,b)
28 数据计算 题目:计算a和b对应元素相乘 难度:⭐⭐ 答案
print(np.multiply(a,b))
print('========方法2========')
print(a * b) #方法2
29 数据计算 题目:计算行列式(使用21题生成的矩阵) 难度:⭐⭐ 答案
np.linalg.det(result)
30 数据计算 题目:矩阵求逆(使用21题生成的矩阵) 难度:⭐⭐ 答案
np.linalg.inv(result)
31 数据计算 题目:将22与23题生成的np.array对象修改为np.matrix对象 难度:⭐⭐ 答案
a = np.matrix(a)
b = np.matrix(b)
32 数据计算 题目:计算上一题生成的两个np.matrix格式矩阵的对应元素乘积(对比异同) 难度:⭐⭐ 答案
np.multiply(a,b)
33 数据计算 题目:对31题生成的两个np.matrix格式矩阵做矩阵乘法(对比异同) 难度:⭐⭐ 答案
a * b
34 数据计算 题目:将ab两个矩阵按照行拼接 难度:⭐⭐ 答案
np.hstack((a,b))
35 数据计算 题目:将ab两个矩阵按照列拼接 难度:⭐⭐ 答案
np.vstack((a,b))
36 数据计算 题目:思考下面代码运行后new的结果 难度:⭐⭐⭐ 答案
new = np.pad(result,pad_width = 1,constant_values=1)
37 数据查找 题目:找到new中大于1的元素的位置 难度:⭐⭐ 答案
np.argwhere(new > 1)
38 数据修改 题目:将new中大于1的元素修改为8 难度:⭐⭐ 答案
new[new > 1] = 8
39 数据计算 题目:对new矩阵按列求和 难度:⭐⭐ 答案
np.sum(new, 0)
40 数据计算 题目:对new矩阵按行求和 难度:⭐⭐ 答案
np.sum(new, 1)
41 数据创建 题目: 生成6行6列的二维数组,值为1-100随机数 难度:⭐ 答案
data = np.random.randint(1,100, [6,6])
42 数据查找 题目:找到每列的最大值 难度:⭐⭐ 答案
np.amax(data, axis=0)
43 数据查找 题目:找到每行的最小值 难度:⭐⭐ 答案
np.amin(data, axis=1)
44 数据计算 题目: 计算data每个元素的出现次数 难度:⭐⭐ 答案
np.unique(data,return_counts=True)
45 数据计算 题目:计算 data每行元素大小排名 难度:⭐⭐ 答案
data.argsort()
46 数据处理 题目: 将data按行重复一次 难度:⭐⭐ 答案
np.repeat(data, 2, axis=0)
47 数据处理 题目:去除data的重复行 难度:⭐⭐ 答案
np.unique(data,axis = 0)
48 数据抽样 题目: 从data的第一行中不放回抽3个元素 难度:⭐⭐ 答案
np.random.choice(data[0:1][0], 3, replace=False)
49 数据计算 题目:计算 data第二行中不含第三行的元素的元素 难度:⭐⭐ 答案
a = data[1:2]
b = data[2:3]
index=np.isin(a,b)
array=a[~index]
array
50 数据计算 题目:判断data是否有空行 难度:⭐⭐ 答案
(~data.any(axis=1)).any()
51 数据排序 题目:将data的每行升序排列 难度:⭐⭐ 答案
data.sort(axis = 1)
52 数据转换 题目:将data的数据格式转换为float 难度:⭐⭐ 答案
data1 = data.astype(float)

思考:为什么不能在data本身转换

53 数据修改 题目: 将data1小于5的元素修改为nan 难度:⭐⭐ 答案
data1[data1 < 5] = np.nan
54 数据处理 题目:删除data1含有空值的行 难度:⭐⭐ 答案
data1 = data1[~np.isnan(data1).any(axis=1), :]
55 数据计算 题目: 计算data1第一行出现频率最高的值 难度:⭐⭐⭐ 答案
vals, counts = np.unique(data1[0,:], return_counts=True)
print(vals[np.argmax(counts)])
56 数据计算 题目:计算data1中与100最接近的元素 难度:⭐⭐⭐ 答案
a = 100
data1.flat[np.abs(data1 - a).argmin()]
57 数据计算 题目:计算 data1每一行的元素减去每一行的平均值 难度:⭐⭐ 答案
data1 - data1.mean(axis=1, keepdims=True)
58 数据计算 题目:将data1归一化至区间[0,1] 难度:⭐⭐ 答案
a = np.max(data1) - np.min(data1)
(data1 - np.min(data1)) / a
59 数据计算 题目:将data1标准化 难度:⭐⭐⭐ 答案
mu = np.mean(data1, axis=0)
sigma = np.std(data1, axis=0)
(data1 - mu) / sigma
60 数据存储 题目:将data1存储至本地 难度:⭐ 答案
np.savetxt('test.txt',data1)
61 数据查找 问:如何获得两个数组之间的相同元素 输入
import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
arr1 = np.random.randint(10,6,6)
arr2 = np.random.randint(10,6,6)
答案
arr1 = np.random.randint(10,6,6)
arr2 = np.random.randint(10,6,6)
print("arr1: %s"%arr1)
print("arr2: %s"%arr2)
np.intersect1d(arr1,arr2)

b2a95b599f4dc5c301d8b4f5996a90c4.png

62 数据修改 问:如何从一个数组中删除另一个数组存在的元素 输入
arr1 = np.random.randint(10,6,6)
arr2 = np.random.randint(10,6,6)
答案:
arr1 = np.random.randint(1,10,10)
arr2 = np.random.randint(1,10,10)
print("arr1: %s"%arr1)
print("arr2: %s"%arr2)
np.setdiff1d(arr1,arr2)

e47ee3e9334cc39aca42963907f69e38.png

63 数据修改 问:如何修改一个数组为只读模式 输入:
arr1 = np.random.randint(1,10,10)
答案:
arr1 = np.random.randint(1,10,10)
arr1.flags.writeable = False

0c08d5b9973f64e343091d49077d32ff.png

64 数据转换 问:如何将list转为numpy数组 输入:
a = [1,2,3,4,5]
答案:
a = [1,2,3,4,5]
np.array(a)

5529f35f759af437d01b8f6589932818.png

65 数据转换 问:如何将pd.DataFrame转为numpy数组 输入:
df = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]})
答案:
df.values

ee4f7c3a9f777f49e8e2c4f912820a9c.png

66 数据分析 问:如何使用nump y进行描述性统计分析 输入:
arr1 = np.random.randint(1,10,10)
arr2 = np.random.randint(1,10,10)
答案:
arr1 = np.random.randint(1,10,10)
arr2 = np.random.randint(1,10,10)

print("arr1的平均数为:%s" %np.mean(arr1))
print("arr1的中位数为:%s" %np.median(arr1))
print("arr1的方差为:%s" %np.var(arr1))
print("arr1的标准差为:%s" %np.std(arr1))
print("arr1,arr的相关性矩阵为:%s" %np.cov(arr1,arr2))
print("arr1,arr的协方差矩阵为:%s" %np.corrcoef(arr1,arr2))

059a67b62cc891b06366554059d26bb5.png

67 数据抽样 问:如何使用numpy进行概率抽样
arr = np.array([1,2,3,4,5])
输入:
arr = np.array([1,2,3,4,5])
np.random.choice(arr,10,p = [0.1,0.1,0.1,0.1,0.6])
答案:

9b6fc0f1329d6299d49e048de690336f.png

68 数据创建 问:如何为数据创建副本 输入:
arr = np.array([1,2,3,4,5])
答案:
#对副本数据进行修改,不会影响到原始数据
arr = np.array([1,2,3,4,5])
arr1 = arr.copy()
69 数据切片 问:如何对数组进行切片 输入:
arr = np.arange(10)
备注 从索引2开始到索引8停止,间隔为2 答案:
arr = np.arange(10)
a = slice(2,8,2)
arr[a] #等价于arr[2:8:2]

2719a9eea77f12da8f66820de2719a7d.png

70 字符串操作 问:如何使用NumPy操作字符串 输入:
str1 = ['I love']
str2 = [' Python']
答案:
#拼接字符串
str1 = ['I love']
str2 = [' Python']
print(np.char.add(str1,str2))

#大写首字母
str3 = np.char.add(str1,str2)
print(np.char.title(str3))

010729fe928414b252a9caca296e4d9a.png

71 数据修改 问: 如何对数据向上/下取整 输入:
arr = np.random.uniform(0,10,10)
答案:
arr = np.random.uniform(0,10,10)
print(arr)
###向上取整
print(np.ceil(arr))
###向下取整
print(np.floor(arr) )

0d61bdc20b4a60a659817c3b066b6716.png

72 格式修改 问: 如何取消默认科学计数显示数据 答案:
np.set_printoptions(suppress=True)
73 数据修改 问:如何使用N umPy对二维数组逆序 输入:
arr = np.random.randint(1,10,[3,3])
答案:
arr = np.random.randint(1,10,[3,3])
print(arr)
print('列逆序')
print(arr[:, -1::-1])
print('行逆序')
print(arr[-1::-1, :])

e6f8b7ea1099af2b8a191a178f7b98a8.png

74 数据查找 问:如何使 用NumPy根据位置查找元素 输入:
arr1 = np.random.randint(1,10,5)
arr2 = np.random.randint(1,20,10)
备注:在arr2中根据arr1中元素以位置查找 答案:
arr1 = np.random.randint(1,10,5)
arr2 = np.random.randint(1,20,10)
print(arr1)
print(arr2)
print(np.take(arr2,arr1))

84183952f05e23ab23168805d7f21d16.png

75 数据计算 问:如何使 用numpy求余数 输入:
a = 10
b = 3
答案:
np.mod(a,b)
76 数据计算 问:如何使用NumPy进行矩阵SVD分解 输入:
A = np.random.randint(1,10,[3,3])
答案:
np.linalg.svd(A)

03b0dcd3497eb3e35c3490bab665150d.png

77 数据筛选 问:如何使用NumPy多条件筛选数据 输入:
arr = np.random.randint(1,20,10)
答案:
arr = np.random.randint(1,20,10)
print(arr[(arr>1)&(arr<7)&(arr%2==0)])
78 数据修改 问: 如何使用NumPy对数组分类 备注:将大于等于7,或小于3的元素标记为1,其余为0 输入:
arr = np.random.randint(1,20,10)
答案:
arr = np.random.randint(1,20,10)
print(arr)
print(np.piecewise(arr, [arr 3, arr >= 7], [-1, 1]))

7597dbca6d0e8bca5df32d2feea99a68.png

79 数据修改 问:如何使用NumPy压缩矩阵 备注:从数组的形状中删除单维度条目,即把shape中为1的维度去掉 输入:
arr = np.random.randint(1,10,[3,1])
答案:
arr = np.random.randint(1,10,[3,1])
print(arr)
print(np.squeeze(arr))

468b0af613bd51ceb6e0741493728655.png

8 0 数据计算 问:如何使用numpy求 解线性方程组 输入:
A = np.array([[1, 2, 3], [2, -1, 1], [3, 0, -1]])
b = np.array([9, 8, 3])
备注:求解Ax=b 答案:
A = np.array([[1, 2, 3], [2, -1, 1], [3, 0, -1]])
b = np.array([9, 8, 3])
x = np.linalg.solve(A, b)
print(x)

ebc8eb2bcbd55283e4e443fdc1d424ec.png

7e64dc6a1ce5b103bc9af5d5adef80f1.png

python爬虫人工智能大数据公众号

d5d91b67199eff4251444bc4fae7d47b.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值