python-numpy

numpy

  • numpy是一个开源的python科学计算库,用于快速处理任意维度的数组。
  • numpy支持常见的数组和矩阵操作,对于同样的数值计算任务,使用numpy比直接使用python要简洁的多。
  • numpy使用ndarray对象来处理多维数据,该对象是一个快速而灵活的大数据容器。
    ndarray–n维数组
    ndarray的属性
    1.ndarray.shape : 数组维度的元组
    2.ndarray.ndim : 数组维度
    3.ndarray.size : 数组中元素个数
    4.ndarray.itemsize : 一个数组元素的长度
    5.ndarray.dtype : 数组元素的类型
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均匀分布
# 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)

python-numpy_第1张图片

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))

python-numpy_第2张图片
4.统计运算 – np.max,np.max

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

矩阵
矩阵的加法:行列数相等的可以加。
在这里插入图片描述

矩阵乘法:每个元素都要乘。
python-numpy_第3张图片

矩阵向量乘法:与线性代数中的矩阵乘法一样的。
python-numpy_第4张图片

你可能感兴趣的:(关于python)