import numpy as np
b = np.arange(12).reshape(2,3,2)
print(b)
# 输出类型的两种写法
print("b的类型:",b.shape)
print("b的类型:",np.shape(b))
# 输出维度
print("b的维数:",b.ndim)
# 输出大小
print("b的大小",b.size)
# 输出一个元素的字节数
print("b的一个元素的长度:",b.itemsize)
# 输出数据类型
print("b的数据类型:",b.dtype)
生成数组
1、生成 0数组,1数组,空数组
d = np.zeros(shape=[4,4],dtype=np.float32)
print(d)
e = np.ones(shape=[4,4],dtype=np.float32)
print(e)
# 空数组根据前面已有的数组进行生成
f = np.empty(shape=[4,4],dtype=np.float32)
print(f)
2、生成固定数组
a = np.arrange(范围).reshape(类型)
eg:a = np.arrange(12).reshape(3,4)
结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
3、生成随机数组–使用random模块
# 生成 0-10之间 2*3的数组
a = np.random.randint(0,10,(2,3))
print(a)
# 生成 0-10之间 5个元素的数组
a1 = np.random.randint(0,10,5)
print(a1)
[[5 7 9]
[7 8 9]]
[3 9 8 8 1]
# 0-1之间的均匀分布
b = np.random.rand(10)
print(b)
# 0-1的均匀分布
e = np.random.random(20)
print(e)
# 0-1的均匀分布
f = np.random.ranf(20)
print(f)
# 自定义的均匀分布
g = np.random.uniform(-1,1,100)
print(g)
#标准的正态分布 均值为0,方差为1
c = np.random.randn(40)
print(c)
# 自定义正态分布,
d = np.random.normal(0,4,100)
print(d)
array与asarray的区别
array:深拷贝(复制一份到另外一个地方)
asarray:浅拷贝(相当于创建快捷方式)
import numpy as np
a = np.arange(12).reshape(3,4)
print(a)
#array
b = np.array(a)
#asarrray
c = np.asarray(a)
#当 a 中某个元素改变时
a[0,0] = 100
print("此时的a")
print(a)
print("此时的b")
print(b)
print("此时的c")
print(c)
``
输出:
此时的a
[[100 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
此时的b
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
此时的c
[[100 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
数组的索引和切片
import numpy as np
#索引和切片
a = np.arange(12).reshape(4,3)
print(a)
#a[1:] 从1处开始切割
print("从a[1:]处开始切割")
print(a[1:])
#切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同。如果在行位置使用省略号,它将返回包含行中元素的 ndarray。
print("输出第二列元素")
print(a[...,1]) # 输出第二列元素
print("输出第三行元素")
print(a[2,...]) # 输出第三行元素
print("输出第2列剩下的所有元素")
print(a[...,1:]) # 输出第2列剩下的所有元素
#数组中(0,0),(1,1)和(2,0)位置处的元素。
x = a[[0,1,2],[0,1,0]]
print("获取数组中(0,0),(1,1)和(2,0)位置处的元素")
print(x)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
从a[1:]处开始切割
[[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
输出第二列元素
[ 1 4 7 10]
输出第三行元素
[6 7 8]
输出第2列剩下的所有元素
[[ 1 2]
[ 4 5]
[ 7 8]
[10 11]]
获取数组中(0,0),(1,1)和(2,0)位置处的元素
[0 4 6]
y = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = y[1:3, 1:3]
c = y[1:3, [1, 2]]
d = y[..., 1:]
print(b)
print(c)
print(d)
[[5 6]
[8 9]]
[[5 6]
[8 9]]
[[2 3]
[5 6]
[8 9]]
数组去重
数组的去重并排序:np.unique()
x = np.array([1,2,2,3,6,8,3,4,7])
print(np.unique(x))
输出结果:[1 2 3 4 6 7 8]
numpy的广播机制
# numpy 广播机制
a = np.arange(12).reshape(4,3)
print(a)
print()
b = [3,2,1] # 广播后与a相加
print(a+b)
a:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
b广播后:
[[ 3 2 1]
[ 3 2 1]
[ 3 2 1]
[ 3 2 1]]
a+b:
[[ 3 3 3]
[ 6 6 6]
[ 9 9 9]
[12 12 12]]
ndarray运算
1.逻辑运算
import numpy as np
a = np.random.normal(0,1,(8,10))
b = a[0:5,0:5]
print(b)
#判断b中的元素是否大于1
print(b>1)
#如果 b中的元素大于1 则赋值为2
b[b>1]=2
print(b)
2.通用判断函数–all,any
c = a[0:2,0:5]
# 1.all:判断中的所有元素是否大于0是则返回True,不是则返回False
print(np.all(c>0))
# 2.any:只要c中有一个元素大于0就返回Ture,否则返回False
print(np.any(c>0))
3.np.where
np.where能够进行更加复杂的运算
np.where有两种用法:
1.np.where(条件,x,y):满足条件输出x,不满足输出y。
import numpy as np
a = np.random.normal(0,1,(8,10))
b = a[0:5,0:5]
print(b)
d = np.where(b>1,1,0)
print(d)
[[-0.94319161 1.04008722 0.01414842 1.62386731 0.71023127]
[ 1.26139257 1.26756886 -2.11931755 1.19621453 1.12783858]
[-0.11935731 0.12820621 0.29439197 -1.36511231 0.24715272]
[ 1.04836803 1.44803845 2.36118284 0.42155884 2.11102423]
[ 1.08267602 1.70681372 -0.32794576 0.04256346 -0.92229507]]
[[0 1 0 1 0]
[1 1 0 1 1]
[0 0 0 0 0]
[1 1 1 0 1]
[1 1 0 0 0]]
2.np.where(条件):满足条件输出则输出满足条件元素的坐标。
import numpy as np
a = np.random.normal(0,1,(8,10))
b = a[0:5,0:5]
print(b)
print(np.where(b>1))
import numpy as np
a = np.random.normal(0,1,(8,10))
b = a[0:5,0:5]
print(b)
#求全局最大值
print("求全局最大值:",np.max(b))
#求每一行的最大值
print("求每一行的最大值:",np.max(b,axis=1))
#求每一列的最大值
print("求每一列的最大值:",np.max(b,axis=0))
# 求最大值的坐标 (全局第几个)in
print("求最大值的坐标:",np.argmax(b))
#求全局最小值
print("求全局最小值:",np.min(b))
#求每一行的最小值
print("求每一行的最小值:",np.min(b,axis=1))
#求每一列的最小值
print("求每一列的最小值:",np.min(b,axis=0))
# 求最小值的坐标 (全局第几个)
print("求最小值的坐标:",np.argmin(b))
[[ 0.78692088 0.48726592 -0.34226009 0.6771978 -1.10973193]
[ 1.91093284 -0.90815935 1.59838552 0.48341863 0.14062321]
[-1.32100207 1.46353938 0.67844956 -0.23501025 -0.51904001]
[-0.22332349 1.04888423 0.84058998 -0.06916592 0.01911171]
[ 0.82252389 -2.20472453 1.2878134 -0.17295978 0.42144708]]
求全局最大值: 1.910932843803024
求每一行的最大值: [0.78692088 1.91093284 1.46353938 1.04888423 1.2878134 ]
求每一列的最大值: [1.91093284 1.46353938 1.59838552 0.6771978 0.42144708]
求最大值的坐标: 5
求全局最小值: -2.2047245300608527
求每一行的最小值: [-1.10973193 -0.90815935 -1.32100207 -0.22332349 -2.20472453]
求每一列的最小值: [-1.32100207 -2.20472453 -0.34226009 -0.23501025 -1.10973193]
求最小值的坐标: 21