1. numpy中常用的方法
-
获取最大值最小值的位置(索引)
numpy.argmax(ndarray,axis=None)
numpy.argmin(ndarray,axis=None)
- 当查找的轴上有多个最大值或最小值,则会返回较小的索引
-
创建一个全0的数组:
numpy.zeros()
-
创建一个全1的数组:
numpy.ones()
-
创建一个对角线为1的正方形数组(方阵、矩阵):
numpy.eye()
# 获取最大值和最小值的位置
t = np.arange(12).reshape((3, 4))
print(t)# axis=0 表示查找每个纵轴上的最大值的索引
print(np.argmax(t, axis=0))
# axis=1 表示查找每个横轴上的最大值、最小值的索引
print(np.argmax(t, axis=1))
print(np.argmin(t, axis=1))# 创建一个全0或全1的数组
t1 = np.zeros((3, 4))
t2 = np.ones((3,4))
print("全0 全1数组")
print(t1)
print(t2)
print("*"*50)
print(np.argmax(t2, axis=1)) # 只返回每行中第一个最大值的索引
t2[0,1:3] = 2.1 # 将t2的第1行的第2、3列变为2.1
print('t2_改值后:')
print(t2)# axis=1 表示查找每个横轴上的最大值的索引
print(np.argmax(t2, axis=1)) # t2的第一行有两个 2.1,但只返回了第一个2.1的索引
# 创建一个n维单位矩阵
t3 = np.eye(3)
print("创建n维矩阵")
print(t3)# 查看每行最大的值的位置
print(np.argmax(t3, axis=1))"""
[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]]
[2 2 2 2]
[3 3 3]
[0 0 0]
全0 全1数组
[[0. 0. 0. 0.][0. 0. 0. 0.][0. 0. 0. 0.]]
[[1. 1. 1. 1.][1. 1. 1. 1.][1. 1. 1. 1.]]
**************************************************
[0 0 0]
t2_改值后:
[[1. 2.1 2.1 1. ][1. 1. 1. 1. ][1. 1. 1. 1. ]]
[1 0 0]
创建n维矩阵
[[1. 0. 0.][0. 1. 0.][0. 0. 1.]]
[0 1 2]
"""
2. numpy生成随机数
- 常用的有下面的1、2、3点
# 创建随机数数组
# 1 创建随机浮点数的数组
# 语法:numpy.random.random(size=None)
# 该方法返回 [ 0.0, 1.0 ) 范围的随机浮点数。参数 size 为随机数的数量,默认为None数量为1个x = np.random.random(size=4) # 生成4个[0.0,1.0)之间的随机数
y = np.random.random(size=(3,4)) # 生成3行4列个 [0.0,1.0)之间的随机数# 2 创建随机整数数组
# 语法:numpy.random.randint()
# 该方法有三个参数 low、high、size 三个参数。默认 high 是None,如果只有low,那范围就是 [0,low) 。如果有 high,范围就是 [low,high)x = np.random.randint(5,size=10) # 生成10个[0,low)范围的随机整数
print(x)
y = np.random.randint(5,10,size=10) # 生成10个[low,high)范围的整数
print(y)
z = np.random.randint(5,10,size=(2,4)) # 生成2行4列个 [low,high)范围的整数# 3 numpy.random.seed(s) 随机数种子,s是给定的种子值,当我们指定了随机种子之后,后面生成的随机数的值就不会变化了,除非再指定另一个种子值
numpy.random.seed(2)
x = np.random.randint(5,10,size=(3,4))
print(x) # 下面每次打印的x和第一次打印的都一样
print(x)
print(x) # 均匀分布, 在相同的大小范围内的出现概率是相等的
# 正态分布, 呈钟型,两头低,中间高,左右对称,即类似完整左右对称的抛物线
# 4 numpy.random.rand(d0,d1,…,dn)
# 产生一个给定形状的浮点数数组,数组中的数值范围在[0, 1)的均匀分布
print("rand")
a = np.random.rand(2, 3)
print(a)
print("*"*50)# 5 numpy.random.randn(d0,d1,…,dn)
# randn 函数返回一个或一组样本,具有标准正态分布(期望为0,方差为1)。dn 表示每个维度,返回值为指定维度的 array。(标准正态分布即半个抛物线)
x = np.random.randn()
print(x)
y = np.random.randn(2,4)
print(y)
z = np.random.randn(2,3,4)
print(z)# 6 numpy.random.normal() 指定期望和方差的正太分布
x = np.random.normal(loc=3,scale=4,size=(2,2,3))
print(x) # 7 numpy.random.uniform(low, high, size)
# 产生一个数组,数组中的数值符合[low, high)的均匀分布
print("uniform")
d = np.random.uniform(1., 2., (2, 3))
print(d)
print("*"*50)
3. numpy中的copy和view
-
即数组的复制和视图
-
浅拷贝效果
-
直接赋值:直接赋值只是创建了对原始数组的一个引用,而不是一个新的数组。因此,对赋值后的数组所做的任何更改都会影响原始数组,反之亦然
-
视图
- 影响:视图是原始数组的一个“窗口”,它不拥有自己的数据,只是原始数组的一个子集或子数组。对视图所做的任何更改都会影响原始数组,反之亦然
- 创建:可以通过切片操作、布尔索引等方式创建视图。例如,
b = a[1:3]
会创建一个a
的子数组b
,这个b
就是a
的一个视图
-
-
深拷贝效果
ndarray.copy()
这个方法,此方法复制后的两个数组直接互不影响。如a = b.copy()
,a、b互不影响