import numpy as np
1.创建numpy数组的几种方法
(1)使用列表创建
#创建一个2行4列的numpy数组
arr = np.array(
[
[1, 2, 3, 4],
[5, 6, 7, 8]
]
)
(2)使用zeros函数创建,数组中每个元素填充0
np.zeros((3, 4))#定义一个3行4列的全是0的numpy数组
(3)使用ones函数创建,数组中每个元素填充1
np.ones((5, 6))#定义一个5行6列的全是1的矩阵
(4)使用empty函数 填充随机值
np.empty((3, 6)) #创建3行6列的随机数组
输出结果如下:
array([[1.58359166e-311, 5.33590898e-322, 0.00000000e+000,
0.00000000e+000, 8.01097888e-307, 3.16251369e+180],
[3.42926747e+169, 6.18057710e+223, 3.42915472e+169,
8.87707041e+252, 1.03915423e-095, 3.98472821e+252],
[3.95970760e+257, 1.12856763e+277, 4.27148457e+180,
1.17522778e+214, 3.97092717e+246, 8.37177429e-144]])
(5)使用arange函数 类似于Python的range函数,其中arange(2, 20, 3)以2开始到20结束(取不到20),步长为3
np.arange(2, 20, 3)
输出结果如下:
array([ 2, 5, 8, 11, 14, 17])
(6)使用linspace函数 生成一个等差数列, 其中linspace(2, 20, 3)以2开始到20结束(取的到20),数列中总共有3个元素
np.linspace(2, 20, 3)
输出结果如下:
array([ 2., 11., 20.])
(7)使用logspace函数 生成一个等比数列,其中logspace(2, 20, 3)以10的2次方开始到10的20次方结束(取得到20),数列中总共3个元素
np.logspace(2, 20, 3)
输出结果如下:
array([1.e+02, 1.e+11, 1.e+20])
(8)使用reshape函数 改变数据的形状
将2*4*5的3维数据转换成4*10的二维数据
形状可变但元素总数是不可变的
reshape函数不会改变原来的ndarray,但是会得到新的ndarray是原数据的视图
视图的概念:多个变量使用一个内存空间
副本的概念:把原来的内存复制了一份放到新的内存空间里
np.ones((2, 4, 5)).reshape((4, 10))
(9)使用random 生成随机数
np.ones((2, 4, 5)).reshape((4, 10))
2.numpy数组的属性
(1)ndim表示维度的数量
(2)shape表示数组的形状
(3)dtype表示数组中元素的数据类型
arr2 = np.array(['aaaaaaa', 'bbbbbb', 'cccccc', 'dddddd'], dtype='|S4')
#其中S表示字符串类型,4表示arr2中的每个元素最多含有4个字符
输出结果为:
array([b'aaaa', b'bbbb', b'cccc', b'dddd'], dtype='|S4')
(4)size表示数组中元素的总个数
3.numpy的基本操作
(1)加法(减,乘,除类似(除法要判断除数是否为0))
arr = np.arange(2, 20, 2)
arr + 2 #数组中每个元素都加2
输出结果为:
array([ 2, 4, 6, 8, 10, 12, 14, 16, 18])
arr = np.arange(2, 20, 2)
arr2 = np.arange(0, 36, 4)
arr + arr2 #arr和arr2中的元素对应相加
输出结果为:
array([ 0, 4, 8, 12, 16, 20, 24, 28, 32])
(2)矩阵的乘法
mat1 = np.array(
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]
]
)
mat2 = np.array(
[
[3, 2, 1],
[6, 4, 5],
[7, 8, 3]
]
)
mat1.dot(mat2)#矩阵的乘法
np.matmul(mat1, mat2)#矩阵的乘法
(3)切片
首先要说明的一点是切片只是原数组的一个视图(视图的概念见上方)
先新建一个二维数组:
new_arr1 = np.array([
[89, 95, 83],
[79, 75, 77],
[74, 51, 88]
])
得到第2行第2个元素
new_arr1[1, 1]
#或者
new_arr1[1][1]
#建议使用第一种方式
生成一个随机的3维数组
new_arr2 = np.empty((2, 3, 4))
取第一维第一行前3列
new_arr2[0, 0:1, 0:3]
输出结果为:
array([[1.16345781e-311, 7.85564377e-322, 0.00000000e+000]])
(4)矩阵的转置
转置只需要调用T或者transpose(),只需要强调一点T和transpose()函数产生的也是一个视图。
4.numpy的文件操作
(1)将数据以二进制的形式保存到磁盘
data1 = np.array([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
])
data2 = np.random.random((4, 5, 6))
#1.save写数据
np.save('data1', data1) #将多维数组存入文件自动添加后缀名为npy(二进制文件)
#2.load以二进制形式读取文件
data11 = np.load("data1.npy")#读取数据时需要加后缀名
(2)存取文本文件
#1.读取数据
help(np.loadtxt)
#fname 文件名
#dtype 数据类型
#comments 注释行符号定义
#delimiter 数据分隔符的定义
#converters 转换函数
#skiprows 跳过的行
#usecols 要用的列
arr4 = np.loadtxt('example.csv', delimiter=',')
from io import StringIO
c = StringIO(u'0 1\n2 3')
arrc = np.loadtxt(c)
np.genfromtxt('example.csv', delimiter=',') #类似于loadtxt
数据写入文件文本文件
arr5 = np.array([
[1, 2, 3],
[3, 4, 5]
])
np.savetxt('arr.csv', arr5, delimiter=',')
np.savetxt('arr.csv', arr5, delimiter=',', fmt="%d")#以整数的形式存入