|
|
|
|
# -*- 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数组,分别输出数组的第2,3行的数据,第3,4列的数据
|
|
|
|
|
5、访问A数组,分别输出数组的轴0方向全选,轴1方向输出第2,3列元素
|
|
|
|
|
6、访问A数组,输出行选取第一行和最后一行,列选取0,3,2列显示
|
|
|
|
|
7、将A数组中所有的奇数变成其平方数输出
|
|
|
|
|
8、求出所有数据、每一行和每一列的平均值并输出
|
|
|
|
|
"""
|