1. 从数组 a=np.arange(15)提取 5 到 10 之间的所有元素
import numpy as np
a = np.arange(15)
print(a[5:11]) # 提取5到10之间的所有元素
2. 将数组 np.arange(20)转变为 4 行 5 列的二维数组,并执行交换第 1 行和第 2 行,交换第 1 列和第 2 列。
import numpy as np
a = np.arange(20).reshape(4, 5) # 创建数组0-20,,并转化为4行5列
print("交换前:", '\n', a)
a[[0, 1], :] = a[[1, 0], :]
# [[0,1],:]表示为第一行、第二行,逗号前是表示行的参数,逗号后的表示列,冒号表示所有列
a[:, [0, 1]] = a[:, [1, 0]]
# [:,[0,1]]表示为第一列、第二列,逗号前是表示行的参数,逗号后的表示列,冒号表示所有行
print("交换后:", '\n', a)
3. 寻找数组 np.random.randint(1,10,size=(5,5))中所有的奇数,并将所有奇数替换为 0.
提示:使用 where 方法或布尔索引
import numpy as np
arr = np.random.randint(1, 10, size=(5, 5)) # 生成5×5的1~10随机数组
####使用where方法######
print("原数组:", '\n', arr)
arr[np.where(arr % 2 == 1)] = 0 # 使用where查询arr所有为奇数的值,令其=0
print("where方法转换后:", '\n', arr)
#####布尔索引####
idx = (arr % 2 == 1) # 布尔索引 下标返回True
arr[idx] = 0 # 符合索引条件的位置 转换
print("布尔索引转换后:", '\n', arr)
4. 从下图中生成数组 a 中,替换大于等于 30 数为 0,并获取给定数组 a 中前 5 个最大值的位置。
np.random.seed(100) a=np.random.uniform(1,50,20)
提示:使用 np.argsort()函数
import numpy as np
np.random.seed(100) # 指定random生成 给定随机数组
a = np.random.uniform(1, 50, 20)
idx = (a > 30) # 利用布尔索引 获取a中>30的数的索引
a[idx] = 0 # 以>30的为索引 令其a的值=0
b = np.argsort(-a) # 对a降序排列,返回排序后的索引值
print(a[b][:5]) # 输出以降序排列为索引的数组a的值,切片输出前5个,即为前5个最大值
5. 输出下列生成数组 a 中输出目标行,即行元素的整数部分没有重复
np.random.seed(100) a = np.random.uniform(1, 30, size=[6,10])
提示:np.modf() 将数组的小数和整数部分以两个独立数组的形式返回,np.unique()实现去重功能
import numpy as np
np.random.seed(100) # 指定random生成 给定随机数组
a = np.random.uniform(1, 30, size=[6, 10]) # 生成6×10去重1~30随机数组
b = np.modf(a) # 分离数组小数和整数部分,以两个独立数组的形式返回
c = b[1] # 整数部分设为新的数组
print("整数部分数组:", '\n', c)
print("去重后每行元素:")
for i in range(6):
for j in c[[i], :]: # 每行循环
print(np.unique(c[[i], :])) # 每行去重
6. 利用下列方式获取数组 iris_2d
url="https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
iris_2d=np.genfromtxt(url, delimiter=',', dtype= 'float')
执行以下操作:
1) 在 iris_2d 数据集的 20 个随机位插入 np.nan 值
2) 在 iris_2d 的 sepallength(第 1 列)中查找缺失值的数量和位置
3) 过滤具有 petallength(第 3 列)> 1.5 和 sepallength(第 1 列)<5.0 的 iris_2d 的行;
4) 选择没有 nan 值的 iris_2d 数组的行
5) 找出数组 iris_2d 是否有缺失的值
6) 在 numpy 数组中用 0 替换 nan
7) 将 iris_2d 的花瓣长度(第 3 列)组成一个文本数组,如果花瓣长度为<3 则为'小',3-5 则为'中','> = 5 则为'大';
8) 在 iris_2d 中为 volume 创建一个新列,其中 volume 是(pi x
petallength x sepal_length ^ 2)/ 3;
9) 查找在 iris 数据集的第 4 列花瓣宽度中第一次出现值大于 1.0 的位置。
import numpy as np
np.random.seed(100)
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
iris_2d = np.genfromtxt(url, delimiter=',', dtype='float')
# 1),随机使得20个数值为np.nan
a, b = np.where(iris_2d) # 取出数据坐标,a对应行,b对应列
# print(a,b) 150行,5列
iris_2d[np.random.choice((a), 20), np.random.choice((b), 20)] = np.nan
# choice(a, size=None, replace=True, p=None)
# 2),输出第一列中缺失值个数和位置
print("缺失值个数:", np.isnan(iris_2d[:, 0]).sum())
print("缺失值位置:", np.where(np.isnan(iris_2d[:, 0])))
# 3),过滤具有(第 3 列)> 1.5 和 h(第 1 列)<5.0 的 iris_2d 的行
condition = (iris_2d[:, 2] > 1.5) & (iris_2d[:, 0] < 5.0) # 筛选条件
print(iris_2d[condition])
# 4),选择没有 nan 值的 iris_2d 数组的行
x = np.array([~np.any(np.isnan(row)) for row in iris_2d])
# ~为取反操作,any只要有就为true,all全部满足则为ture
# 本语句意思为,对于每一行存在nan则为true,再取反为false,表示本行不存在nan
print(iris_2d[x][:5]) # 由于每行都存在nan,数组x中没有值
# 5) 找出数组 iris_2d 是否有缺失的值
print(np.isnan(iris_2d).any())
# 6) 在 numpy 数组中用 0 替换 nan
iris_2d = np.where(np.isnan(iris_2d), 0, iris_2d)
print(iris_2d)
# 7) 将 iris_2d 的花瓣长度(第 3 列)组成一个文本数组,如果花瓣
# 长度为<3 则为'小',3-5 则为'中','> = 5 则为'大';
a1 = np.digitize(iris_2d[:, 2].astype('float'), [0, 3, 5, 10000])
tag = {1: '小', 2: '中', 3: '大'}
lst = [tag[i] for i in a1]
print(lst)
# 8) 在iris_2d中volume创建一个新列,其中volume是(pi x petallength x sepal_length ^ 2)/ 3
petallength = iris_2d[:, 2]
sepallength = iris_2d[:, 0]
volume = (np.pi * petallength * (sepallength ** 2)) / 3
print(volume)
# 9) 查找在 iris 数据集的第 4 列花瓣宽度中第一次出现值大于 1.0的位置
x = np.argmax(iris_2d[:, 3].astype('float') > 1.0)
print(x)
7.(选做) 使用 numpy 数组计算由 5 个坐标:(1,9)、(5,12)、(8,20)、(4,10)、(2,8) 构成的图形的周长。
import numpy as np
v1 = np.array([1, 9, 5, 12, 8, 20, 4, 10, 2, 8])
v2 = np.array([5, 12, 8, 20, 4, 10, 2, 8, 1, 9])
dis1 = np.sqrt(np.sum(np.square(v1 - v2)))
dis2 = np.linalg.norm(v1 - v2)
print(dis1)
print(dis2) # 两者答案一样
本文介绍了如何使用NumPy进行数组操作,包括从数组中提取特定区间元素、二维数组的行列交换、查找并替换奇数、处理异常值与排序、去重、插入NaN、数据清洗与转换等。通过实例展示了在处理Iris数据集和生成图形周长方面的应用。
898

被折叠的 条评论
为什么被折叠?



