import numpy as np
# 打印numpy版本
print(np.__version__)
# 构造一个全零的矩阵,并打印其占用的内存大小
z = np.zeros((5, 5))
print(z.size * z.itemsize)
# 打印一个函数的帮助文档,比如numpy.add
# print(help(np.info(np.add)))
# 创建一个数组10-49 并将其倒序排列
arr = np.arange(10, 50, 1)
arr = arr[::-1]
print(arr)
# 找到一个数组元素中不为0的索引
print(np.nonzero([0, 1, 1, 1, 0, 3, 4, 5, 6, 7, 123, 0, 1]))
# 随机构造一个3*3的矩阵,并打印其中最大与最小值
arr = np.random.random((3, 3))
print(arr)
print(arr.min())
print(arr.max())
# 构造一个5*5的矩阵,令其值都是1,并在最外层加上一圈0
arr = np.ones((5, 5))
arr = np.pad(arr, pad_width=1, constant_values=0) # 参数1:需要填充的数组 参数2:填充几层 参数3:填充的数字
print(arr)
# 构建一个shape为(6,7,8)的矩阵,并找到第100个元素的索引值
arr = np.empty((6, 7, 8), dtype='float32')
print(arr.shape)
arr100 = np.unravel_index(100, arr.shape)
print(arr100)
# 对一个5*5的矩阵做一个归一化的操作
arr = np.random.random((5, 5))
arr_min = arr.min()
arr_max = arr.max()
arr = (arr - arr_min) / (arr_max - arr_min)
print(arr)
# 找到两个数组中的相同值
z1 = np.random.randint(0, 10, 10)
z2 = np.random.randint(0, 10, 10)
print(z1)
print(z2)
print(np.intersect1d(z1, z2))
# 得到今天 明天 昨天的日期
yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
today = np.datetime64('today', 'D')
tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
print(yesterday)
print(today)
print(tomorrow)
# 得到一个月中的所有的天
month = np.arange('2023-10', '2023-11', dtype='datetime64[D]')
print(month)
# 得到一个数的整数部分
z = np.random.uniform(0, 10, 10)
print(z)
z = np.floor(z)
print(z)
# 构造一个数组,让它不能被改变 只能读
z = np.zeros(5)
z.flags.writeable = False
# z[0] = 10 会报异常
print(z[0])
# 打印大数据的部分值
# np.set_printoptions(threshold=5)
z = np.zeros((15, 15))
print(z)
# 找到在一个数组中,最接近的一个数的索引
z = np.arange(100)
v = np.random.uniform(0, 100)
print(v)
index = (np.abs(z - v)).argmin()
print(z[index])
# 32位float类型和32位int类型转换
z = np.arange(10, dtype=np.int32)
print(z.dtype)
z = z.astype(np.float32)
print(z.dtype)
# 打印数组元素位置坐标与数值
z = np.arange(9).reshape(3, 3)
for index, value in np.ndenumerate(z):
print(index, value)
# 按照数组的某一列进行排序
z = np.random.randint(0, 10, (3, 3))
print(z)
print()
print(z[z[:, 1].argsort()])
# 统计数组中每个数值出现的次数
z = np.array([1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 6, 8])
print(np.bincount(z))
# 如何对一个思维数组的最后两维来求和
z = np.random.randint(0, 10, (4, 4, 4, 4))
res = z.sum(axis=(-2, -1))
print(res)
print()
# 交换矩阵中的两行
z = np.arange(25).reshape(5, 5)
print(z)
z[[0, 1]] = z[[1, 0]]
print(z)
print()
# 找到数组中最常见的数字
z = np.random.randint(0, 10, 50)
print(z)
print(np.bincount(z).argmax())
# 快速查找最大的数
z = np.arange(10000)
np.random.shuffle(z)
n = 5 # 找5个
print(z[np.argpartition(-z, n)[:n]])
# 找到一个数组中,所有元素都相同的数据
z = np.random.randint(0, 3, (10, 3))
print(z)
e = np.all(z[:, 1:] == z[:, :-1], axis=1) # 找到一样的值
print(e)