赞
踩
安装nmupy: cmd窗口输入pip install numpy
import numpy as np //引入库
ndarray 是numpy中最基本的数据类型之一,相当于是n-dim 的array(n个维度的数组)
定义方法: np.array(x)
x为list类型。
类型:<class ‘numpy.ndarray’>
array = np.array([1,2,3,4,5]) # 定义一个维度的ndarray
print (type(array))
数组与单个数值相加
array2 = array + 1 # 数组中的每一个值与该数字相加
# ararry2的值: array([2, 3, 4, 5, 6])
数组与数组相加
array2 +array # 数组中对应的值相加
# 结果:array([ 3, 5, 7, 9, 11])
元素相加
ndarray中所有元素的相加:np.sum(array)
, array.sum
axis=0: 可以按照列相加np.sum(array,axis=0)
,array.sum(axis=0)
axis=0: 可以按照行相加np.sum(array,axis=1)
,array.sum(axis=1)
array = np.array([[1,2,3],[4,5,6]])
np.sum(array) #21
array.sum # 21
np.sum(array,axis=0) #array([5, 7, 9])
array.sum(axis=0) #array([5, 7, 9])
np.sum(array,axis=1) # array([ 6, 15])
array.sum(axis=1) # array([ 6, 15])
np.sum(array,axis=-1) # array([ 6, 15])
*
进行点积array2 * array # 数组中对应的值相乘
# 结果:array([ 2, 6, 12, 20, 30])
x = np.array([1,1,1])
y = np.array([[1,2,3],[4,5,6]])
print (x * y)
'''
[[1 2 3]
[4 5 6]]
'''
np.multiply(x,y)
: 两个数组进行点积
np.dot(x,y)
:根据两个数组的结构进行不同方式的相乘
x = np.array([5,5])
y = np.array([2,2])
np.multiply(x,y) # array([10, 10])
#方式一: 两个数组结构相同,返回数组中所有元素的乘积
np.dot(x,y) # 20
#方式二:两个数组结构不同,返回类似于矩阵乘法的结果,注意顺序不同时,得到的结果也不同
x=np.array([[5],
[5]])
y=np.array([2,2])
np.dot(x,y)
'''
array([[10, 10],
[10, 10]])
'''
np.dot(y,x) # array([[20]])
array.prod()
: 数组中的所有元素相乘array.prod(axis = 0)
: 按照列相乘array.prod(axis = 1)
: 按照行相乘array = np.array([[1,2,3],[4,5,6]])
array.prod() # 720
array.prod(axis = 0) # array([ 4, 10, 18])
array.prod(axis = 1) # array([ 6, 120])
均值:array.mean()
标准差: array.std()
方差: array.var()
axis=0时按照列求均值(标准差),axis=1时按照行求均值(标准差)
array = np.array([[1,2,3],[4,5,6]])
# 均值
array.mean() # 3.5
array.mean(axis = 0) # array([ 2.5, 3.5, 4.5])
# 标准差
array.std() # 1.707825127659933
array.std(axis = 1) # array([ 0.81649658, 0.81649658])
# 方差
array.var() # 2.9166666666666665
与:np.logical_and(x,y)
或:np.logical_or(x,y)
非:np.logical_or(x,y)
返回值是布尔类型
y = np.array([1,1,1,4])
x = np.array([1,1,1,2])
x == y
# array([ True, True, True, False], dtype=bool)
np.logical_and(x,y)
# array([ True, True, True, True], dtype=bool)
np.logical_or(x,y)
#array([ True, True, True, True], dtype=bool)
np.logical_not(x,y)
# array([0, 0, 0, 0])
索引与切片:跟Python都是一样。
索引: 从前往后时,第一个为0;从后往前时,第一个为-1.
切片: 左闭右开
array = np.array([1,2,3,4,5])
array[0] # 1
array[1:3] # array([2, 3])
array[-2:] # array([4, 5])
array.argmin()
, array.argmax()
: 按照从左到右,从上到下的顺序寻找最大值,最小值的位置
axis = 0 :寻找每一列最小值所在的位置
axis = 1 :寻找每一行最小值所在的位置
# 寻找索引位置
array = np.array([[1,2,3],[4,5,6]])
array.argmin() # 0
array.argmin(axis = 0) # array([0, 0, 0], dtype=int64)
array.argmin(axis=1) # array([0, 0], dtype=int64)
array.argmax() # 5
type(array)
: 查看array 的类型
type(array) # numpy.ndarray
array.dtype
:查看array中每一个元素的类型
array.dtype # dtype('int32')
dtype还可以取int64,float32,bool,object …
对于ndarray结构来说,里面所有的元素必须是同一类型的 如果不是的话,会自动的向下进行转换
array = np.array([1,10,3.5,'str'],dtype = np.object)
# array([1, 10, 3.5, 'str'], dtype=object)
array * 2
# array([2, 20, 7.0, 'strstr'], dtype=object)
array.nbytes
: array中所有元素占用字节数
array = np.array([1,2,3,4,5])
array.nbytes #4*5=20
array.itemsize
: 每个元素占用的字节数
array = np.array([1,2,3,4,5])
array.itemsize # 4
array.size
: 元素的个数
array = np.array([1,2,3,4,5])
array.size # 5
np.size(array) # 5
查看数组的形状
查看数组的形状:array.shape
,np.shape(array)
返回每个维度的大小
改变数组形状:直接对array.shape进行重新赋值
array.shape # array([1, 2, 3, 4, 5]) # (5,) np.shape(array) # (5,) array3=np.array([[1,2,3],[4,5,6]]) array3.shape # (2, 3) # 改变shape array = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) array.shape # (10,) array.shape = 2,5 ''' array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]) ''' #转置 array.shape = 2,5 ''' array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]) '''
注意:列表(list) 没有shape
改变数组形状
array.reshape()
: 改变数组的形状
array = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array.reshape(1,10) # array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
# 大小不能改变,若array .shape = 3,4则报错
np.newaxis
: 增加新的轴
array = array[np.newaxis,:]
array.shape # (1, 10)
array = np.arange(10)
array = array[:,np.newaxis]
array.shape # (10, 1)
array = array[:,np.newaxis,np.newaxis]
array.shape # (10, 1, 1, 1)
array.squeeze()
: 压缩至最底维度
array = array.squeeze()
array.shape #(10,)
数组转置
array.squeeze()
,array.T
: 实现数组的转置
''' ''' array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]) ''' ''' array.squeeze() ''' array([[0, 5], [1, 6], [2, 7], [3, 8], [4, 9]]) ''' array.T ''' array([[0, 5], [1, 6], [2, 7], [3, 8], [4, 9]]) '''
np.concatenate((a,b))
: 默认a,b 数组竖着拼接, axis=1时,a b 数组横向拼接
# np.concatenate
a = np.array([[123,456,678],[3214,456,134]])
b = np.array([[1235,3124,432],[43,13,134]])
c = np.concatenate((a,b)) # 竖着连接
'''
array([[ 123, 456, 678],
[3214, 456, 134],
[1235, 3124, 432],
[ 43, 13, 134]])
'''
c = np.concatenate((a,b),axis = 1) #横着连接
'''
array([[ 123, 456, 678, 1235, 3124, 432],
[3214, 456, 134, 43, 13, 134]])
'''
np.vstack((a,b))
: 竖着连接
np.hstack((a,b))
:横着连接
np.vstack((a,b))
'''
array([[ 123, 456, 678],
[3214, 456, 134],
[1235, 3124, 432],
[ 43, 13, 134]])
'''
np.hstack((a,b))
'''
array([[ 123, 456, 678, 1235, 3124, 432],
[3214, 456, 134, 43, 13, 134]])
'''
查看维度
array.ndim
: 返回维度的个数
'''
a=array([1,2,3])
'''
array.ndim # 1
降维操作
a.flatten()
, a.ravel()
: 将高维数组降维成1维。
'''
a= array([[ 123, 456, 678],
[3214, 456, 134]])
'''
a.flatten()# array([ 123, 456, 678, 3214, 456, 134])
a.ravel() # array([ 123, 456, 678, 3214, 456, 134])
array.min()
,array.max()
: 求数组中的最小值,最大值。axis = 0时按照列寻找,axis = 0时按照行寻找。
# array = np.array([[1,2,3],[4,5,6]])
array.min() # 1
array.min(axis = 0) # array([1, 2, 3])
array.min(axis = 1) # array([1, 4])
array.max() # 6
array.clip(min,max)
: 将小于min的数值置为min,将大于max的数值置为max。
array.clip(2,4)
'''
array([[2, 2, 3],
[4, 4, 4]])
'''
array.round()
:四舍五入,设置decimals ,改变小数保留的位数。
array = np.array([1.2,3.56,6.41])
# array([ 1., 4., 6.])
array.round(decimals=1)
# array([ 1.2, 3.6, 6.4])
多维数组的定义,大小,形状,索引,切片
array = np.array([[1,2,3], [4,5,6], [7,8,9]]) array.shape # (3,3) array.size # 9 array.ndim # 2 array[1,1] # 5 array[1,1] = 10 //改 ''' array([[ 1, 2, 3], [ 4, 10, 6], [ 7, 8, 9]]) ''' array[1] # array([ 4, 10, 6]) array[:,1] # array([ 2, 10, 8]) array[0,0:2] #array([1, 2])
np.arrange(start,end,d)
: 生成[start,end) 区间内,公差为d的等差数列。
np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array = np.arange(0,100,10) # array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
mask = np.array([0,0,0,1,1,1,0,0,1,1],dtype=bool)
# array([False, False, False, True, True, True, False, False, True, True])
array[mask] # array([30, 40, 50, 80, 90])
np.where(tang_array > 30) #(array([3, 4], dtype=int64),)
np.linspace(start,end,n)
:生成[start,end] 区间内的n个数。
array = np.linspace(0,10,10)
'''
array([ 0. , 1.11111111, 2.22222222, 3.33333333,
4.44444444, 5.55555556, 6.66666667, 7.77777778,
8.88888889, 10. ])
'''
np.linspace(start,end,n)
:生成log值在[start,end] 区间内的n个数
# 默认以10为底
np.logspace(0,1,5) # array([ 1. , 1.77827941, 3.16227766, 5.62341325, 10. ])
np.meshgrid
: 生成网格数据
x = np.linspace(-10,10,5)
y = np.linspace(-10,10,5)
x, y= np.meshgrid(x,y)
'''
x=y=array([[-10., -5., 0., 5., 10.],
[-10., -5., 0., 5., 10.],
[-10., -5., 0., 5., 10.],
[-10., -5., 0., 5., 10.],
[-10., -5., 0., 5., 10.]])
'''
np.r_[start,end,d]
: 按照行生成[start,end) 区间内,公差为d的等差数列。
np.c_[start,end,d]
: 按照生成[start,end) 区间内,公差为d的等差数列。
np.r_[0:10:1] # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.c_[0:10:1]
'''
array([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])
'''
np.zeros
: 生成全0数组
np.zeros
: 生成全1数组
np.zeros(3) #array([ 0., 0., 0.])
np.ones((3,3))
'''
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
'''
array = np.array([1,2,3,4])
np.zeros_like(array)# array([0, 0, 0, 0])
np.ones_like(array) # array([1, 1, 1, 1])
a.fill()
: 用指定数字来填充数组
a = np.empty(6)
a.fill(1) # array([ 1., 1., 1., 1., 1., 1.])
np.random.rand()
: 生成大小为(0,1) 的随机数,或者随机数构成的矩阵
np.random.rand() # 0.5595234784766201
random_array = np.random.rand(10) #默认值都是从0到1
# array([0.91640149, 0.61464164, 0.81346537, 0.57917897, 0.37086614, 0.54156666, 0.47357823, 0.79819449, 0.76635931, 0.13830215])
np.random.rand(3,2)
'''
array([[ 0.87876027, 0.98090867],
[ 0.07482644, 0.08780685],
[ 0.6974858 , 0.35695858]])
'''
np.random.random_sample() # 0.8279581297618884
np.random.randint()
: 生成正整数构成的随机数组
#返回的是随机的整数,左闭右开
np.random.randint(10,size = (5,4))
'''
array([[8, 0, 3, 7],
[4, 6, 3, 4],
[6, 9, 9, 8],
[9, 1, 4, 0],
[5, 9, 0, 5]])
'''
np.random.randint(0,10,3)# array([7, 7, 5])
randn()
:随机样本符合标准正态分布(可能取到任意值)。 n:normal distribution(正态分布).
arr1 = np.random.randn(2,4)
print(arr1)
'''
[[-1.03021018 0.5197033 0.52117459 -0.70102661]
[ 0.98268569 1.21940697 -1.095241 -0.38161758]]
'''
np.random.normal(mu,sigma,n)
: 生成均值为mu,方差为sigma呈正态分布的n个随机数
mu, sigma = 0,0.1
np.random.normal(mu,sigma,10)
'''
array([ 0.05754667, -0.07006152, 0.06810326, -0.11012173, 0.10064039,
-0.06935203, 0.14194363, 0.07428931, -0.07412772, 0.12112031])
'''
np.random.shuffle(array)
: 对数组中的元素位置进行洗牌
array = np.arange(10)
np.random.shuffle(array)# array([6, 2, 5, 7, 4, 3, 1, 0, 8, 9])
np.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])
np.sort()
: 对数组进行排序
array = np.array([[1.5,1.3,7.5],
[5.6,7.8,1.2]])
np.sort(array) #默认按行排序
'''
array([[ 1.3, 1.5, 7.5],
[ 1.2, 5.6, 7.8]])
'''
np.sort(array,axis = 0) #按照列排序
'''
array([[ 1.5, 1.3, 1.2],
[ 5.6, 7.8, 7.5]])
'''
np.argsort(array)
: 返回排序前的索引
np.argsort(array)
'''
array([[1, 0, 2],
[2, 0, 1]], dtype=int64)
'''
np.searchsorted(array,values)
:对于已经排序好的数组array, 返回values在array中的插入位置
array = np.linspace(0,10,10)
'''
array([ 0. , 1.11111111, 2.22222222, 3.33333333,
4.44444444, 5.55555556, 6.66666667, 7.77777778,
8.88888889, 10. ])
'''
values = np.array([2.5,6.5,9.5])
np.searchsorted(array,values) # 在排序好的数组中插入的位置
# array([3, 6, 9], dtype=int64)
np.lexsort
: 返回按照指定方式排序前的索引
array = np.array([[1,0,6],
[1,7,0],
[2,3,1],
[2,4,0]])
index = np.lexsort([-1*array[:,0],array[:,2]]) # 按照第一列降序,第二列升序
# array([0, 1, 3, 2], dtype=int64)
array =array[index]
'''
array([[2, 4, 0],
[1, 7, 0],
[2, 3, 1],
[1, 0, 6]])
'''
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])
writefile
: 向文件中写入数据
%%writefile file1.txt
1 2 3 4 5 6
2 3 5 8 7 9
readlines
: 逐行读取数据 (比较麻烦,更推荐loadtxt方法)
data = []
with open('file1.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=array([[ 1., 2., 3., 4., 5., 6.],
[ 2., 3., 5., 8., 7., 9.]])
'''
loadtxt
: 从文件中读取数据并返回ndarray结构
data = np.loadtxt('file1.txt')
'''
array([[ 1., 2., 3., 4., 5., 6.],
[ 2., 3., 5., 8., 7., 9.]])
'''
delimiter
: 按照指定分割符读取数据
%%writefile tang2.txt
1,2,3,4,5,6
2,3,5,8,7,9
data = np.loadtxt('file2.txt',delimiter = ',')
'''
array([[ 1., 2., 3., 4., 5., 6.],
[ 2., 3., 5., 8., 7., 9.]])
'''
skiprows
: 跳过指定的行读取数据
%%writefile file3.txt
x,y,z,w,a,b
1,2,3,4,5,6
2,3,5,8,7,9
data = np.loadtxt('file3.txt',delimiter = ',',skiprows = 1)
'''
array([[ 1., 2., 3., 4., 5., 6.],
[ 2., 3., 5., 8., 7., 9.]])
'''
usecols
:读取指定列的数据
%%writefile tang2.txt
x,y,z,w,a,b
1,2,3,4,5,6
2,3,5,8,7,9
data = np.loadtxt('tang2.txt',delimiter = ',',skiprows = 1,usecols=(0,1,4))
'''
array([[ 1., 2., 5.],
[ 2., 3., 7.]])
'''
np.savetxt
: 保存数据,并可以指定保存的格式、分隔符
array = np.array([[1,2,3],[4,5,6]])
np.savetxt('file4.txt',array)
np.savetxt('file4.txt',array,fmt='%d')
np.savetxt('file4.txt',array,fmt='%d',delimiter = ',')
np.savetxt('file4.txt',array,fmt='%.2f',delimiter = ',')
np.save()
, np.load
普通读写npy文件
array = np.array([[1,2,3],[4,5,6]])
np.save('array.npy',tang_array)
files = np.load('array.npy')
'''
files= array([[1, 2, 3],
[4, 5, 6]])
'''
np.savez
:压缩存储多个array(npz文件)
array2 = np.arange(10)
np.savez('filezip.npz',a=tang_array,b=tang_array2) #压缩存放
data = np.load('filezip.npz')
data.keys() # ['b', 'a']
data['a']
'''
array([[1, 2, 3],
[4, 5, 6]])
'''
data['b']
'''
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
'''
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。