You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
toratoratora/numpy上课学生代码.py

195 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# -*- coding: utf-8 -*-
"""
Created on Wed Dec 22 13:11:41 2021
@author: hzh
"""
import numpy as np # 导入numpy库
import pandas as pd
from pandas import DataFrame
# 创建ndarray数组
# 一维数组
data1 = [6, 7.5, 8, 0, 1] # 列表
arr1 = np.array(data1)
print(arr1.ndim)
arr2 = np.array((5.6, 6.7, 7.8, 8.9, 9.)) # 元组
print(arr2)
# pandas series
print('pandas series')
df1 = pd.Series(data1)
print(df1)
print(df1.values)
print((df1.values).ndim)
df2 = df1.values.reshape(1, -1)
print(df2)
print(df2.ndim)
print(df2[0])
print(df2[0, 0])
# print(df1.values.reshape(1,-1))
# 二维numpy数组
import numpy as np
data1 = [[6, 7.5, 8, 0, 1], [3.2, 3, 7, 52, 23.4]]
arr1 = np.array(data1)
print(arr1)
print(arr1.shape, arr1.ndim, arr1.dtype, arr1.size)
# pandas DataFrame
print('pandas DataFrame')
arr2 = pd.DataFrame(data1)
print(arr2.values)
print(arr2.shape, arr2.ndim, arr2.size)
print(arr2[0]) # 显示0列数据
print(arr2.loc[0]) # 显示0行数据
print(arr2.iloc[0, 0]) # 显示0行0列数据
# reshape(),astype()
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5, 6]) # 6个元素的一维数组
arr1 = arr1.reshape(2, 3) # 改变为2行3列的二维数组
print(arr1)
arr2 = arr1.astype(str) # 转换成字符型
print(arr2)
# 自动创建数组1
print(np.ones(6))
print(np.zeros(6).reshape(2, 3))
print(np.arange(2, 10, 2))
print(np.linspace(2, 13, 12))
# 创建随机数组
np.random.seed(100)
# 生成2行3列的随机数数组值在[0,1)之间
n1 = np.random.rand(2, 3)
print(n1)
# 生成2行3列的随机数数组值为正态分布的随机样本数
n2 = np.random.randn(2, 3)
print(n2)
# 生成包含10个元素的值在[0,100) 的数组
n3 = np.random.randint(0, 100, 10)
print(n3)
# 生成2*3维的值在[0,100) 的数组
n4 = np.random.randint(0, 100, (2, 3))
print(n4)
# 通过文件读取保存数组
import numpy as np
arr1 = np.arange(10)
np.savetxt('2.txt', arr1, fmt='%0.4f', delimiter=',')
arr2 = np.loadtxt('2.txt')
print(arr2)
# 访问数组元素
# 用下标访问元素1
x = np.array([1, 2, 3, 4, 5, 6])
print(x[4]) # 一维数组访问第4个元素从0开始计数
x = np.array([[1, 2, 3], [4, 5, 6]])
print(x[1]) # 二维数组访问第1行数据从0开始计数
# 列表切片2
arr = np.arange(10)
print(arr)
print(arr[5: 8])
arr[5: 8] = 12 # 值的广播
print(arr)
# 数组的切片不是一个新的数组,是数组的一个视图
arr = np.arange(10)
arr_slice = arr[5:8] # 获得一个视图而不是新的数组
arr_slice[1] = 32
print(arr)
# 通过切片获得新数组的方法copy()
arr = np.arange(10)
arr_slice = arr[5:8].copy()
arr_slice[1] = 32
print(arr)
# 访问高维数组元素, 切片不改变维度
arr1d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr1d)
print(arr1d[1, 2]) # 等价于print(arr1d[1][2])
print(arr1d[1]) # 数组子集(也是视图)
print()
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2d)
print(arr2d[:2]) # 在轴0上切片
print(arr2d[:2, 1:]) # 在轴0和轴1上切片
print()
arr3d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr3d[1, :2]) # 轴0选第一行然后在轴1上切片
print(arr3d[:, 1]) # 轴0全选然后选取第1列
# print(arr3d)
# 列表索引(花式索引)获得的是新数组,不是视图
import numpy as np
arr2d = np.linspace(1, 100, 12).reshape(4, 3)
print(arr2d)
print(arr2d[[2, 0, 1]]) # 依次选取轴0的2,0,1行
print(arr2d[:, [2, 0]]) # 依次选取轴1的2,0列
# print(arr2d)
# 布尔索引
arr2d = np.array([[1, -2, 3], [-4, 5, 6]])
print(arr2d)
print(arr2d < 0) # arr2d<0 是个布尔型数组
print(arr2d[arr2d < 0]) # 用布尔型数组来索引
arr2d[arr2d < 0] = 0 # 赋值
print(arr2d)
# numpy的基本运算标量向量和矩阵
# 广播运算
data1 = [[6, 7.5, 8, 0, 1], [3.2, 3, 7, 52, 23.4]]
arr1 = np.array(data1)
arr1 = arr1 * 2 # 这是广播运算
print(arr1)
# print(1/arr1)
# print(arr1**0.5)
# 标量运算
print(np.sum([1, 2, 3, 4]))
print(np.sqrt(100))
print(np.abs(-10))
# 向量运算
lst = [[6, 7.5, 8, 0, 1], [3.2, 3, 7, 52, 23.4]]
arr2d = np.array(lst)
print(arr2d)
print(np.sum(arr2d))
print(np.min(arr2d, axis=1)) # 求每一行中的最小值,向量
print('*' * 20)
np.mean(arr2d, axis=0) # 求每一列的平均值,向量
# 矩阵运算函数diag(),dot(),trace(),det()....
import numpy as np
A = np.array([[m + n for m in np.arange(4)] for n in np.arange(4)]) # 4 x 4 2D arrays
B = np.array([[m - n for m in np.arange(3)] for n in np.arange(4)]) # 4 x 3 2D arrays
C = np.arange(4) # 1D vector with a size of 4
# A, B, C
print(A)
print(B)
print(C)
print(A.shape)
print(B.shape)
print(C.shape)
# 计算矩阵相乘
print(np.dot(A, B), '\n')
print(np.dot(A, C))
print(np.dot(C, A)) # 数学上的矩阵相乘
""" 练一练:
1、用arange()生成一个0-20以内5行4列的A数组
2、将A数组元素保存在arr1.txt文件中保存格式为%4d,以逗号作为分隔符
3、访问A数组输出数组的0行最后一个元素
4、访问A数组分别输出数组的第23行的数据第34列的数据
5、访问A数组分别输出数组的轴0方向全选轴1方向输出第23列元素
6、访问A数组输出行选取第一行和最后一行列选取032列显示
7、将A数组中所有的奇数变成其平方数输出
8、求出所有数据、每一行和每一列的平均值并输出
"""