1.numpy属性
array=np.array([[1,2,3],[2,3,4]])#使用numpy.array来创建数组
print("type ",type(array))
print(array)
print('number of dim',array.ndim)#ndarray.ndim 数组的维度
print("shape",array.shape)#ndarray.shape返回一个包含数组维度的元组,它也可以用于调整数组大小。
print('size',array.size)#总共有多少个元素
2.创建数组
有好几种创建数组的方法。
例如,你可以使用array函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。
a=np.array([1,2,3],dtype=np.int32)#创建了一维数组
b=np.array([[1,3,4],[3,45.5,6]])#创建了二维数组
print(a)
print(a.dtype)
print(b)
print(b.dtype)
#输出
[1 2 3]
int32
[[ 1. 3. 4. ]
[ 3. 45.5 6. ]]
float64
#dtype定义了数据类型
NumPy中的基本数据类型 名称 描述
bool 用一个字节存储的布尔类型(True或False)
inti 由所在平台决定其大小的整数(一般为int32或int64)
int8 一个字节大小,-128 至 127
int16 整数,-32768 至 32767
int32 整数,-2 ** 31 至 2 ** 32 -1
int64 整数,-2 ** 63 至 2 ** 63 - 1
uint8 无符号整数,0 至 255
uint16 无符号整数,0 至 65535
uint32 无符号整数,0 至 2 ** 32 - 1
uint64 无符号整数,0 至 2 ** 64 - 1
float16 半精度浮点数:16位,正负号1位,指数5位,精度10位
float32 单精度浮点数:32位,正负号1位,指数8位,精度23位
float64或float 双精度浮点数:64位,正负号1位,指数11位,精度52位
complex64 复数,分别用两个32位浮点数表示实部和虚部
complex128或complex 复数,分别用两个64位浮点数表示实部和虚部
创建一个全部为0的矩阵 numpy.zeros()
a=np.zeros((3,4))#创建了一个三行四列的矩阵
print(a)
#输出
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
创造全部为1的矩阵 numpy.ones()
a=np.ones((3,4),dtype=np.int16)#创建了一个三行四列的矩阵
print(a)
输出
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
生成随机矩阵 numpy.empty()
a=np.empty((3,4))#生成随机矩阵
print(a)
#输出
[[6.23042070e-307 7.56587584e-307 1.37961302e-306 6.23053614e-307]
[6.23053954e-307 9.34609790e-307 8.45593934e-307 9.34600963e-307]
[1.86921143e-306 6.23061763e-307 8.90104239e-307 1.11253693e-306]]
生成有序的矩阵 numpy.arange()
a = np.arange(12, 14)
b = np.arange(12).reshape((3, 4))#重新调整了数组的维度,注意要有()
print(a)
print(b)
#输出
[12 13]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
生成一个等差数列 numpy.linspace()
a=np.linspace(1,10,6)#常看到的一般是三个参数,分别是:起始值、终止值(默认包含自身)、数列个数
b=a.reshape((2,3))
print(a)
print(b)
#输出
[ 1. 2.8 4.6 6.4 8.2 10. ]
[[ 1. 2.8 4.6]
[ 6.4 8.2 10. ]]
3.基础运算
数组的运算
a = np.array([10, 11, 12, 13])
b = np.arange(4)
c = a - b # 减法
d = a + b # 加法
e = a * b # 乘法
f = b ** 2 # 平方
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
#输出
[10 11 12 13]
[0 1 2 3]
[10 10 10 10]#-
[10 12 14 16]#+
[ 0 11 24 39]#*
[0 1 4 9]#**2
三角函数的运算
np.sin()……
a = np.array([10, 11, 12, 13])
b = 10 * np.sin(a)
c = 10 * np.cos(a)
print(a)
print(b)
print(c)
#输出
[10 11 12 13]
[-5.44021111 -9.99990207 -5.36572918 4.20167037]#sin
[-8.39071529 0.04425698 8.43853959 9.07446781]#cos
数组中的值的比较
a = np.array([10, 11, 12, 13])
print(a < 12)
print(a == 13)
#输出
[ True True False False]
[False False False True]
矩阵的运算
np.dot()
a = np.array([[1,1],[1,0]])
b=np.arange(4).reshape((2,2))
c=np.dot(a,b)#矩阵的乘法
print(a)
print(b)
print(c)
#输出
[[1 1]#a
[1 0]]
[[0 1]#b
[2 3]]
[[2 4]#c
[0 1]]
求最大值(np.max())、最小值(np.min())、求和(np.sum())
a = np.random.random((2, 4)) # 生成一个2行4列的随机数组每个数值[0.0, 1.0)
print(a)
print(np.sum(a))#求和
print(np.min(a))#最小值
print(np.max(a))#最大值
#输出
[[0.7629701 0.98383964 0.14707335 0.47315195]
[0.86016093 0.30829918 0.18056867 0.82868108]]
4.54474490746057#求和
0.14707335220307682#最小值
0.9838396398528461#最大值
添加上axis
当axis=1时 在每一行操作
当axis=0时 在每一列操作
a = np.random.random((2, 4)) # 生成一个2行4列的随机数组每个数值[0.0, 1.0)
a = np.random.random((2, 4)) # 生成一个2行4列的随机数组每个数值[0.0, 1.0)
print(a)
print(np.sum(a,axis=1))#求和
print(np.min(a,axis=0))#最小值
print(np.max(a,axis=1))#最大值
#输出
[[0.66119035 0.46815043 0.30343994 0.52637789]
[0.00968897 0.0638045 0.25099375 0.57531702]]
[1.9591586 0.89980425]
[0.00968897 0.0638045 0.25099375 0.52637789]
0.6611903483952365
其他的一些运算
import numpy as np
a = np.arange(2, 14).reshape((3, 4))
b = np.arange(14, 2, -1).reshape((3, 4))
print(a)
print(b)
print(np.argmax(a)) # 最大值的索引
print(np.argmin(a)) # 最小值的索引
print(np.mean(a)) # 输出平均值
print(np.average(a)) # 也是计算平均值
print(np.median(a)) # 计算中位数
print(np.cumsum(a)) # 累加,计算前n个值的和
print(np.diff(a)) # 每两个数之间的差
print(np.sort(b)) # 进行排序,逐行进行排序
print(np.transpose(a)) # 矩阵的转置
print(np.clip(a, 5, 9)) # 所有<5的数就等于5,所有大于9的数就等于就9,其他保留
#输出
[[ 2 3 4 5]#a
[ 6 7 8 9]
[10 11 12 13]]
[[[14 13 12 11]#b
[10 9 8 7]
[ 6 5 4 3]]
11 # 最大值的索引
0 # 最小值的索引
7.5 # 输出平均值
7.5 # 也是计算平均值
7.5 # 计算中位数
[ 2 5 9 14 20 27 35 44 54 65 77 90]# 累加,计算前n个值的和
[[1 1 1] # 每两个数之间的差
[1 1 1]
[1 1 1]]
[[11 12 13 14] # 进行排序,逐行进行排序
[ 7 8 9 10]
[ 3 4 5 6]]
[[ 2 6 10] # 矩阵的转置
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]]
[[5 5 5 5] # 所有<5的数就等于5,所有大于9的数就等于就9,其他保留
[6 7 8 9]
[9 9 9 9]]
4.numpy的索引
import numpy as np
b=np.arange(3,15).reshape((3,4))
print(b)
print(b[2])
#两种不同的表达方式
print(b[2][2])
print(b[2,2])
#第二行所有的数
print(b[2,:])
#第一列所有的数
print(b[:,1])
#第一行第一列到第三列的值,这里的1,3是指数组中的1,3
print(b[1,1:3])#数组列数1,2
#迭代每一行
for row in b:
print(row)
#迭代每一列
for column in np.transpose(b):#先将矩阵转置,然后再迭代每一行,那么就相当于迭代了每一列
print(column)
#迭代每一列的另一种方式
for column2 in b.T:
print(column2)
#迭代每一个项目
print(b.flatten())
for item in b.flatten():
print(item,end=' ')
#输出
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[11 12 13 14]
13
13
[11 12 13 14]
[ 4 8 12]
[8 9]
#迭代每一行
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
#迭代每一列
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
#迭代每一个项目
[ 3 4 5 6 7 8 9 10 11 12 13 14]
3 4 5 6 7 8 9 10 11 12 13 14
5.numpy的array操作
numpy的array合并
numpy.vstack(tup)
沿着竖直方向将矩阵堆叠起来。
import numpy as np
A=np.array([1,2,3])
B=np.array([4,5,6])
C=np.vstack((A,B))
print(C)
#输出
[[1 2 3]
[4 5 6]]
numpy.hstack(tup)
沿着水平方向将数组堆叠起来。
import numpy as np
A=np.array([1,2,3])
B=np.array([4,5,6])
D=np.hstack((A,B))
print(D)
#输出
[1 2 3 4 5 6]
numpy的array的分割
numpy.vspilt()
横向的分割
必须要等量分隔
import numpy as np
A=np.arange(12).reshape((3,4))
print(A)
print(np.vsplit(A,3))
#输出
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])
numpy.hspilt()
横向的分割
必须要等量分隔
import numpy as np
A=np.arange(12).reshape((3,4))
print(A)
print(np.hsplit(A,4))
#输出
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0],
[4],
[8]]), array([[1],
[5],
[9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
* numpy.split(ary, indices_or_sections, axis=0)*
当axis==1时表示纵向
axis==0时表示横向
等量分割
import numpy as np
A=np.arange(12).reshape((3,4))
print(A)
print(np.split(A,2,axis=1))
#输出
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
numpy.array_split(ary, indices_or_sections, axis=0)
与上面的区别就是支持不等量分隔
import numpy as np
A=np.arange(12).reshape((3,4))
print(A)
print(np.array_split(A,3,axis=1))
#输出
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
6.numpy的复制
a=numpy.arrange(4)
b=a#代表a与b关联了起来,a改变那么b也会改变
如果仅仅只想赋值
可以用
b=a.copy()#a的改变不会使b也改变了