yjs07——numpy数组的使用
1.一维二维三维数组的创建:
一维数组:a1=np.array([1,2,3])
二维数组:a2=np.array([ [1,2,3],[3,4,5] ])
三维数组:a3=np.array([ [ [1,2,3],[3,4,5]]
[ [0,1,2],[0,7,5] ] ])
2.数组的属性查看
1.数组的维度:arr.ndim 2.数组的形状:arr.shape 3.数组的尺寸:arr.size
4.数组的类型:arr.dtype 5.数组元素的大小:arr.itemsize
#没有括号!
3.数组的创建:
A.创建0数组;创建1数组
arr=np.ones(shape=(“张”数,行数,列数))
arr=np.zeros(shape=(..,..,..))
arr=np.like_ones(arr_1)
arr=np.like_zeros(arr_1)
B深浅拷贝
深拷贝(复制):arr2=np.array(arr1)
浅拷贝(快捷方式):arr2=np.asarray(arr1) #浅拷贝在a1发生变化时,a2也变化
C.间隔创建
arr=np.linspace(起始值,末,最后组数n,endpoint=True/False)
// endpoint表示是否包括最后一个数
k=np.linspace(0,11,3,endpoint=True) print(k) #结果:[ 0. 5.5 11. ]
arr=np.arange(起始值,末,间隔个数,endpoint=)
D.均匀分布数
arr=np.random.uniform(起始,末尾,(行,列)) #浮点数
arr=np.random.randint(起始,末尾,(行数,列数)) #整数
arr=np.random.rand(行数,列数) #生成0-1之间的数
#不支持三维
#对于均匀分布,我们可以将生成的数据放入matplotlib,使用直方图plt.hist(数据,宽度,density=True)来看一看
E.正态分布数
1.两个参数:μ:均值,反应对称轴的位置;
δ:标准差,反应图像的胖瘦(越小越瘦,即数据越集中)
2.代码: arr=np.random.normal(μ,δ,size)
arr=np.random.standard_normal(μ,δ,size) #标准正态分布
4.切片索引
arr[张起始下标:张末, 行起始下标:行末 , 列起:列末]
#截取时包括起始位置,不包括结束位置
5.形状改变
arr2=arr1.reshape([行,列])
#reshape这里如果只想指定行或列,并不知道一共有多少个数据,我们可以用“-1”代替未知
#reshape不在原数据上操作
arr1.resize(【行,列】)
#resize不可使用-1代替未知
#resize不需要新的变量进行接收,他就是在原数据上做出改变
arr2=arr1.T #矩阵转置
6.去重
arr2=np.unique(arr1)
#1.不在原数值上做出改变,所以想查看效果,需要用新的变量接受
#2.arr2是一维数组,他就是把arr1中出现的“有效元素”摘出来
#3.注意这里是 np.xxx
7.更改类型
arr2=arr1.astype(np.int32)
代码:
import numpy as np
import matplotlib.pyplot as plt
# 1.二维数组
arr1 = np.array([[1, 2, 3], [0, 0, 0], [3, 5, 6]], dtype=str)
# 2.三维数组
arr2 = np.array(
[
[['h', 'd', 's', 's', 's'], ['3', 'f', 'f', 'a', 'g']],
[['d', 'd', 'd', 'f', 'd'], ['3', 'd', 'h', 'x', 'd']],
[['a', 'c', 'z', 'c', 'y'], ['w', 'w', 'w', 'w', 'w']]
])
# 3.数组属性查看
print(arr1)
print(arr2)
print(arr1.dtype)
print(arr2.ndim)
print(arr2.shape)
print(arr2.size)
print(arr1.itemsize)
# 3.自动生成数组
# 3.1自动生成0;1数组
arr01 = np.ones(shape=(2, 2, 3))
arr001 = np.ones_like(arr01)
arr02 = np.zeros(shape=(2, 3, 1))
arr002 = np.zeros_like(arr01)
print(arr01)
print("------------------------------")
print(arr02)
print("------------------------------")
print(arr001)
print("------------------------------")
print(arr002)
print("======================================================")
# 3.2深浅拷贝
arr_1 = np.array(arr001)
arr_2 = np.asarray(arr001)
arr001[0, 0, 0] = 99
print("arr_1是array深拷贝,只是复制一份,原数据改变他不变,arr_1为:")
print(arr_1)
print("arr_2是asarray浅拷贝,就像快捷方式一样,元数据怎么变,他怎么变,arr_2为:")
print(arr_2)
print("=======================================================")
# 3.3均匀分布随机生成
arr_r1 = np.random.rand(2, 3)
arr_r2 = np.random.uniform(0, 1, 100000)
arr_r3 = np.random.randint(0, 10, (2, 1))
f, axes = plt.subplots(nrows=2, ncols=1, figsize=(80, 20), dpi=100)
axes[0].hist(arr_r2, 10, density=True)
print("===========================================================")
# 3.4正态分布
arr_z1 = np.random.normal(170, 5, 10000)
axes[1].hist(arr_z1, 10, density=True)
plt.show()
print("===========================================================")
# 4.切片和索引
s1 = np.random.uniform(0, 1, (3, 4, 5))
s2 = s1[0:1, 0:3, 1:2]
print(s1)
print(s2)
s11 = np.random.randint(0, 10, (3, 4))
s22 = s11[1:3, 0:1]
print(s11)
print(s22)
print("==================================================")
# 5.形状改变
s33 = s11.reshape([-1, 6])
print(s11)
print(s33)
print("````````````````````````")
s11.resize([6, 2])
print(s11)
print("````````````````````````")
s55 = s11.T
print(s55)
print("==============================================")
# 6.类型修改
print(s11.dtype)
s00 = s11.astype(np.float64)
print(s00)
print("==============================================")
#7.数组去重
n1=np.array([[1,2,3,3,4],[1,2,3,0,2],[1,2,3,3,4]])
print(n1)
n2=np.unique(n1)
print(n2)
k=np.linspace(11,0,3,endpoint=True)
print(k)
❤遇到的问题:
1.创建0、1数组时,规格那里要写zeros(shape=(,,));
在reshape、resize那里,是 reshape(【,,】)
在均匀分布、正态分布处,直接是uniform(,,(行数,列数))
2.均匀分布那里不支持三维
3.resize不用其他变量“接着”,就是修改原数据
4.unique去重需要有新的变量接着
5.截取是左闭右开,要头不要尾
6.一般构建数组都是 np.xxx;在其他操作的时候都是 数组.xxx;但是在去重那里是np.unique(a)