1、array结构
- Numpy,数据由矩阵组成,矩阵计算使用Numpy(科学计算);
- Numpy,list数据需要先转化成ndarray结构(n 表示的是n个 d dimension 维度 array 数组);
- 对于ndarray结构来说,里面所有的元素必须是同一类型的 如果不是的话,会自动的向下进行转换;
数值类型
float–浮点型
str --字符串
int – 整型
object–字符串
2、ndarray基本属性操作
- 使用之前需要先导入numpy工具包;
- 退出需要重新运行工具包。
import numpy as np
- type打印当前输入格式
wang_list = [1,2,3,4,5]
wang_array = np.array(wang_list)
wang_array
type(wang_array)
numpy.ndarray
- dtype打印当前输入类型
wang_array.dtype
dtype(‘int32’)
- astype:转换类型
wang_array.astype(np.float32)
array([ 1., 2., 3., 4., 5.], dtype=float32)
- itemsize:打印当前数组大小
wang_array.itemsize
4
- size:有几个元素
wang_array.size
5
- .shape值;(m,n)表示m*n维数据,即有m个样本数据,每个数据有n个特征,可了解数据规模;也可debug。
wang_array.shape
np.shape(wang_array)
(5,)
- dnim:维度
wang_array.ndim
1
- fill:填充
wang_array.fill(0)
wang_array
array([0, 0, 0, 0, 0])
3、索引与切片
(1)一维数组
- 索引与切片:跟Python都是一样的 还是从0开始的;
- 从左取到右但是不包括右;
- -1表示从最后一个。
wang_list = [1,2,3,4,5,6]
wang_array = np.array(wang_list)
wang_array[0]
1
wang_array[1:3]
array([2, 3])
wang_array[-3:]
array([4, 5, 6])
(2)多维数组索引
- 需指定每个维度的索引;
- 若未指定某一维度,表示取此维度所有数据;
- 右边不指定维度可以省略冒号,左边不可;
- 可通过索引定位到数据,然后对数据进行赋值。
wang_array = np.array([[1,2,3],
[4,5,6],
[7,8,9]])#3*3的二维数组(两个中括号)
wang_array[1,1]
5
wang_array[1,1]=10#赋值
wang_array
array([[ 1, 2, 3],
[ 4, 10, 6],
[ 7, 8, 9]])
wang_array[1]
array([ 4, 10, 6])
wang_array[:,1]
array([ 2, 10, 8])
wang_array[0,0:1]
array([1,2])
(3)赋值(=)&复制(copy)
等号赋值会改变原本数组的值,.copy复制不会改变原本数组的值。
- 等号(=)赋值
wang_array2 = wang_array
wang_array2[1,1] = 100
wang_array
array([[ 1, 2, 3],
[ 4, 100, 6],
[ 7, 8, 9]])
- .copy 复制
wang_array2 = wang_array.copy()
wang_array2[1,1] = 10000
wang_array2
array([[ 1, 2, 3],
[ 4, 10000, 6],
[ 7, 8, 9]])
wang_array
array([[ 1, 2, 3],
[ 4, 100, 6],
[ 7, 8, 9]])
(4)布尔类型的索引
- np.arange(a,b,n):表示a和b之间等间隔产生n个数据;
- dtype=bool,0表示False,1表示True,dtype设置格式。
wang_array = np.arange(0,100,10)
wang_array
mask = np.array([0,0,0,0,0,0,1,1,1,1],dtype=bool)#指定值
mask
wang_array[mask]#按照布尔类型值取数据
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
array([False, False, False, False, False, False, True, True, True,
True])
array([60, 70, 80, 90])
- random.rand(n),表示在0和1之间随机生成n个数据;
random_array = np.random.rand(10)#
random_array
mask = random_array > 0.5#做判断,条件值
mask
wang_array[mask]
array([0.34173479, 0.77632628, 0.34125884, 0.5262027 , 0.62157668,0.5484839 , 0.81023541, 0.75616737, 0.61977412, 0.78414371])
array([False, True, False, True, True, True, True, True, True,
True])
array([ 0, 10, 30, 40, 50, 60, 80, 90])
- where操作,输出满足条件的索引值的位置
wang_array = np.array([10,20,30,40,50])
wang_array > 30#输出布尔值
wang_array[np.where(tang_array > 30)]
array([False, False, False, True, True], dtype=bool)
array([40, 50])
4、数值计算
- 对array数组进行加减乘除等操作,表示对数组里面的每一个数据进行此操作;
array = [1,2,3,4,5]
array = np.array([1,2,3,4,5])
array2 = array + 1
array2
array([2, 3, 4, 5, 6])
- 数组和数组进行数值计算,需要两个数组具有相等的(.shape)值(结构一样);
array2 *array
array([ 6, 12, 20, 30, 42])
- 二维数组
wang_array=np.array([[1,2,3],[4,5,6]])
wang_array
array([[1, 2, 3],
[4, 5, 6]])
- 指定要进行的操作是沿着什么轴(维度),axis=0表示纵轴,axis=1表示横轴。(不指定表示对所有元素执行此操作)
np.sum(wang_array,axis=0)
array([5, 7, 9])
np.sum(wang_array,axis=1)
array([6, 5])
wang_array.sum()#未指定轴
21
prod:乘积操作
sum:求和
mean:均值
std:标准差
var:方差
clip(m,n):截断操作,数值大小从m开始,到n结束,不满足条件的替换
wang_array=np.array([[1,2,3],[4,5,6]])
wang_array.clip(2,4)
array([[2, 2, 3],
[4, 4, 4]])
round :四舍五入,decimals小数点位数
a= np.array([1.2,3.56,6.41])
a.round()
a.round(decimals=1)
array([1., 4., 6.])
array([ 1.2, 3.6, 6.4])
argmin:找到最小值索引位置
argmax:找到最大值索引位置
argsort:顺序索引位置,默认横向
5、排序(sort)
- 默认横向升序排列
- axis=0为降序排列
a = np.array([[1.5,1.3,7.5],
[5.6,7.8,1.2]])
np.sort(a,axis = 0)
array([[ 1.5, 1.3, 1.2],
[ 5.6, 7.8, 7.5]])
- linspace(a,b,n):表示从a开始,到b结束的等间隔的n个值(和arange不同,见上文)
- searchsorted(array1,array2):返回array2插入array1的索引位置(按大小顺序插入)
a = np.linspace(0,10,10)
values = np.array([2.5,6.5,9.5])
np.searchsorted(a,values)
-array([ 0. , 1.11111111, 2.22222222, 3.33333333, 4.44444444, 5.55555556, 6.66666667, 7.77777778, 8.88888889, 10. ])
-array([3, 6, 9], dtype=int64)
- lexsort:花式排序(默认升序,-1表示降序)
a = np.array([[1,0,6],
[1,7,0],
[2,3,1],
[2,4,0]])
index = np.lexsort([-1*a[:,0],a[:,2]])#第一列降序,第三列升序
index
array([0, 1, 3, 2], dtype=int64)
a = a[index]
a
array([[2, 4, 0],
[1, 7, 0],
[2, 3, 1],
[1, 0, 6]])
6、数组形状
- shape、reshape:更改数组形状
a= np.arange(10)#10个元素的一维数组
a
a.shape
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
(10,)
a.shape=2,5#更改shape值,2行5列的二维数组
a
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
a.reshape(1,10)#更改shape值,1行10列的二维数组
a
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
- np.newaxis:增加新轴(左边表示行、右边表示列),可加多个轴
a=a[np.newaxis,:]#轴加在行
a.shape
(1, 10)
a=a[:,np.newaxis]#轴加在列
a.shape
(10, 1)
- squeeze:压缩没有元素的轴
a=a.squeeze()
a.shape
(10,)
- .transpose:转置
- .T:转置
a.shape = 2,5
a,transpose()
array([[0, 5],
[1, 6],
[2, 7],
[3, 8],
[4, 9]])
- .concatenate((a,b),axis=0):数组的连接,axis=0纵向拼接(默认),axis=1横向拼接
- .vstack((a,b)),纵向拼接
- .hstack((a,b)),横向拼接
a = np.array([[1,2,3],[3,4,5]])
b=np.array([[6,7,8],[8,9,6]])
c=np.concatenate((a,b),axis=1)
c
array([[ 1, 2, 3, 6, 7, 8],
[3, 4, 5, 8, 9, 6]])
- .flatten,拉长操作
a.flatten
array([1,2,3,3,4,5])
7、数组生成
- np.arange(10)
- np.arange(2,20,2)
- np.arange(2,20,2,dtype=np.float32)
- np.linspace(0,10,10)
- np.logspace(0,1,5)#默认以10为底
- np.zeros(3)
- np.zeros((3,3))
- np.ones((3,3))
- np.ones((3,3)) * 8
np.ones((3,3)) * 8
array([[ 8., 8., 8.],
[ 8., 8., 8.],
[ 8., 8., 8.]])
- np.empty(6)
a = np.empty(6)
a
array([0., 0., 0., 0., 0., 0.])
- fill
a.fill(1)
a
array([ 1., 1., 1., 1., 1., 1.])
- np.zeros_like(array1)#0替换
- np.ones_like(array2)#1替换
- identity(n):n*n的二维数组
np.identity(5)
ay([[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 1.]])
8、运算
- multiply:对应位置相乘
- dot:一维的时候是求内积(对应位置相乘求和),二维是矩阵运算
x = np.array([5,5])
y = np.array([2,2])
np.dot(x,y)
20
x.shape = 2,1
y.shape = 1,2
print (x.shape)
print (y.shape)
-(2, 1)
-(1, 2)
np.dot(x,y)
array([[10, 10],
[10, 10]])
np.dot(y,x)
array([[20]])
- logical_and:与()np.logical_and(x,y)
- logical_or:或
- logical_not:非
y = np.array([1,1,1,4])
x = np.array([1,1,1,2])
x == y
np.logical_and(x,y)
np.logical_or(x,y)
np.logical_not(x,y)
array([ True, True, True, False], dtype=bool)
array([ True, True, True, True], dtype=bool)
array([ True, True, True, True], dtype=bool)
array([0, 0, 0, 0])
9、随机模块
- random.rand()
- 一般随机模块传进来的都是shape值
- 所有的值都是从0到1
np.random.rand(3,2)
array([[ 0.87876027, 0.98090867],
[ 0.07482644, 0.08780685],
[ 0.6974858 , 0.35695858]])
- random.randint()
- 左闭右开,指定整数值,size指定范围
np.random.randint(10,size = (5,4))#5行4列二维矩阵,数值为小于10整数
array([[8, 0, 3, 7],
[4, 6, 3, 4],
[6, 9, 9, 8],
[9, 1, 4, 0],
[5, 9, 0, 5]])
- np.random.random_sample()#随机采样,得到一个随机的结果
- np.random.randint(0,10,3)#从0到10取3个随机整数,左闭右开
- 指定分布,np.set_printoptions#指定精度:小数位数
np.set_printoptions(precision = 2)
mu, sigma = 0,0.1
np.random.normal(mu,sigma,10)#指定高斯分布
array([ 0.01, 0.02, 0.12, -0.01, -0.04, 0.07, 0.14, -0.08, -0.01, -0.03])
- 洗牌,random.shuffle(乱序)
a= np.arange(10)
np.random.shuffle(a)
a
array([6, 2, 5, 7, 4, 3, 1, 0, 8, 9])
- 随机的种子random.seed(指定种子值),按照恒定的方式随机
np.random.seed(100)
mu, sigma = 0,0.1
np.random.normal(mu,sigma,10)
array([-0.17, 0.03, 0.12, -0.03, 0.1 , 0.05, 0.02, -0.11, -0.02, 0.03])
10、读写操作
(1)读取TXT
- python方法
%%writefile w.txt#写数据
1 2 3 4 5 6
2 3 5 8 7 9
data = []
with open('w.txt') as f:
for line in f.readlines():
fileds = line.split()
cur_data = [float(x) for x in fileds]
data.append(cur_data)
data = np.array(data)
data
- numpy方法,loadtxt
data = np.loadtxt('w.txt')
data
-路径最好放到和代码一起
-skiprows : 去掉几行
-delimiter = ‘,’ :分隔符
-usecols = (0,1,4) :指定使用哪几列
-fmt=’%d’:格式,默认科学计数法
data = np.loadtxt('w.txt',delimiter = ',',skiprows = 1)
data
- 保存
np.savetxt('w.txt',tang_array,fmt='%.2f',delimiter = ',')
(2)读取array结构
- 保存数组
x1 = np.array([[1,2,3],[4,5,6]])
np.save('x1.npy',tang_array)#保存数组,npy常用
- 使用数组
aa = np.load('x1.npy')
aa
array([[1, 2, 3],
[4, 5, 6]])
法2
x2 = np.arange(10)
np.savez('xx。npz',a=x1,b=x2)#npz,不常用
data['a']
array([[1, 2, 3],
[4, 5, 6]])
这篇博客详细介绍了Numpy的array结构、ndarray属性操作,包括一维和多维数组的索引与切片,数值计算、排序、数组形状操作、数组生成、运算、随机模块的使用以及读写操作,是学习Numpy的重要参考资料。


被折叠的 条评论
为什么被折叠?



