python中shape0
❶ python基础 numpy中的常见函数有哪些
有些Python小白对numpy中的常见函数不太了解,今天小编就整理出来分享给大家。
Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。
数组常用函数
1.where()按条件返回数组的索引值
2.take(a,index)从数组a中按照索引index取值
3.linspace(a,b,N)返回一个在(a,b)范围内均匀分布的数组,元素个数为N个
4.a.fill()将数组的所有元素以指定的值填充
5.diff(a)返回数组a相邻元素的差值构成的数组
6.sign(a)返回数组a的每个元素的正负符号
7.piecewise(a,[condlist],[funclist])数组a根据布尔型条件condlist返回对应元素结果
8.a.argmax(),a.argmin()返回a最大、最小元素的索引
改变数组维度
a.ravel(),a.flatten():将数组a展平成一维数组
a.shape=(m,n),a.reshape(m,n):将数组a转换成m*n维数组
a.transpose,a.T转置数组a
数组组合
1.hstack((a,b)),concatenate((a,b),axis=1)将数组a,b沿水平方向组合
2.vstack((a,b)),concatenate((a,b),axis=0)将数组a,b沿竖直方向组合
3.row_stack((a,b))将数组a,b按行方向组合
4.column_stack((a,b))将数组a,b按列方向组合
数组分割
1.split(a,n,axis=0),vsplit(a,n)将数组a沿垂直方向分割成n个数组
2.split(a,n,axis=1),hsplit(a,n)将数组a沿水平方向分割成n个数组
数组修剪和压缩
1.a.clip(m,n)设置数组a的范围为(m,n),数组中大于n的元素设定为n,小于m的元素设定为m
2.a.compress()返回根据给定条件筛选后的数组
数组属性
1.a.dtype数组a的数据类型
2.a.shape数组a的维度
3.a.ndim数组a的维数
4.a.size数组a所含元素的总个数
5.a.itemsize数组a的元素在内存中所占的字节数
6.a.nbytes整个数组a所占的内存空间7.a.astype(int)转换a数组的类型为int型
数组计算
1.average(a,weights=v)对数组a以权重v进行加权平均
2.mean(a),max(a),min(a),middle(a),var(a),std(a)数组a的均值、最大值、最小值、中位数、方差、标准差
3.a.prod()数组a的所有元素的乘积
4.a.cumprod()数组a的元素的累积乘积
5.cov(a,b),corrcoef(a,b)数组a和b的协方差、相关系数
6.a.diagonal()查看矩阵a对角线上的元素7.a.trace()计算矩阵a的迹,即对角线元素之和
以上就是numpy中的常见函数。更多Python学习推荐:PyThon学习网教学中心。
❷ Python中怎样使用shape计算矩阵的行和列
你得先安装numpy库,矩阵(ndarray)的shape属性可以获取矩阵的形状(例如二维数组的行列),获取的结果是一个元组,因此相关代码如下:
importnumpyasnp
x=np.array([[1,2,5],[2,3,5],[3,4,5],[2,3,6]])
#输出数组的行和列数
printx.shape#(4,3)
#只输出行数
printx.shape[0]#4
#只输出列数
printx.shape[1]#3
❸ python 代码 问题img.shape[0:2]
[0:2]这个应当是切片的意思
img.shape 应当是OpenCV模块中处理图片的 是图片的一个属性 ,这个属性是个列表 然后对这个列表切片操作
❹ Python小问题
出现这个问题是因为索引出现了浮点数,不是索引允许的数据类型,可以验证一下
importnumpyasnp
y=np.zeros(shape=(1,5))
arr=[nforninnp.linspace(1,5,5)]
arr里存储的就是源代码中会用的索引,下图是结果
importnumpyasnp
y=np.zeros(shape=(1,5))
forninnp.int16(np.linspace(1,5,5)):
y[0,n-1]=n**2
print(y)
❺ python自带及pandas、numpy数据结构(一)
1.python自带数据结构:序列(如list)、映射(如字典)、集合(set)。
以下只介绍序列中的list:
创建list:
list1 = []
list1 = [1,2,3,4,5,6,7,8,9] #逗号隔开
list2 = [[1,2],[3,4],[5,6],[7,8]] #list2长度(len(list2))为2,list2[0] = [1,2]
liststring = list(“thisisalist”) #只用于创建字符串行表
索引list:
e = list1[0] #下标从零开始,用中括号
分片list:
es = list1[0:3]
es = list1[0:9:2] #步长在第二个冒号后
list拼接(list1.append(obj)、加运算及乘运算):
list长度:
list每个元素乘一个数值:
list2 = numpy.dot(list2,2)
list类似矩阵相乘(每个元素对应相乘取和):
list3 = numpy.dot(list1,list1)
#要求相乘的两个list长度相同
list3 = numpy.dot(list2,list22)
#要求numpy.shape(list2)和numpy.shape(list22)满足“左行等于右列”的矩阵相乘条件,相乘结果numpy.shape(list3)满足“左列右行”
2.numpy数据结构:
Array:
产生array:
data=np.array([[1, 9, 6], [2, 8, 5], [3, 7, 4]])
data=np.array(list1)
data1 = np.zeros(5) #data1.shape = (5,),5列
data1 = np.eye(5)
索引array:
datacut = data[0,2] #取第零行第二列,此处是6
切片array:
datacut = data[0:2,2] # array([6, 5])
array长度:
data.shape
data.size
np.shape(data)
np.size(data)
len(data)
array拼接:
#括号内也有一个括号(中括号或者小括号)!
d = np.concatenate((data,data))
d = np.concatenate((data,data),axis = 1) #对应行拼接
array加法:逐个相加
array乘法:
d = data data #逐个相乘
d = np.dot(data,data) #矩阵相乘
d = data 3 #每个元素乘3
d = np.dot(data,3) #每个元素乘3
array矩阵运算:
取逆 : np.linalg.inv(data)
转置:data.T
所有元素求和 : np.sum(data)
生成随机数:np.random.normal(loc=0, scale=10, size=None)
生成标准正态分布随机数组:np.random.normal(size=(4,4))
生成二维随机数组:
np.random.multivariate_normal([0,0],np.eye(2))
生成范围在0到1之间的随机矩阵(M,N):
np.random.randint(0,2,(M,N))
Matrix:
创建matrix:
mat1 = np.mat([[1, 2, 3], [4, 5, 6]])
mat1 = np.mat(list)
mat1 = np.mat(data)
matrix是二维的,所有+,-,*都是矩阵操作。
matrix索引和分列:
mat1[0:2,1]
matrix转置:
np.transpose(mat1)
mat1.transpose()
matrix拼接:
np.concatenate([mat1,mat1])
np.concatenate([mat1,mat1],axis = 1)
numpy数据结构总结:对于numpy中的数据结构的操作方法基本相同:
创建:np.mat(list),np.array(list)
矩阵乘:np.dot(x,y)
转置:x.T or np.transpose(x)
拼接:np.concatenate([x,y],axis = 1)
索引:mat[0:1,4],ary[0:1,4]
3.pandas数据结构:
Series:
创建series:
s = pd.Series([[1,2,3],[4,5,6]],index = [‘a’,‘b’])
索引series:
s1 = s[‘b’]
拼接series:
pd.concat([s1,s1],axis = 1) #也可使用s.append(s)
DataFrame:
创建DaraFrame:
df = pd.DataFrame([[1,2,3],[1,2,3]],index = ['a','b'],columns = ['x','y','z'])
df取某一列:
dfc1 =df.x
dfc1 = df[‘x’]
dfc2 = df.iloc[:,0] #用.iloc方括号里是数字而不是column名!
dfc2 = df.iloc[:,0:3]
df取某一行:
dfr1 = df.iloc[0]
df1 = df.iloc[0:2]
df1 = df[0:2] #这种方法只能用于取一个区间
df取某个值:
dfc2 = df.iloc[0,0]
dfc2 = df.iloc[0:2,0:3]
❻ 图像双三次插值算法原理及python实现
一. 图像双三次插值算法原理:
假设源图像 A 大小为 m*n ,缩放后的目标图像 B 的大小为 M*N 。那么根据比例我们可以得到 B(X,Y) 在 A 上的对应坐标为 A(x,y) = A( X*(m/M), Y*(n/N) ) 。在双线性插值法中,我们选取 A(x,y) 的最近四个点。而在双立方插值法中,我们选取的是最近的16个像素点作为计算目标图像 B(X,Y) 处像素值的参数。如图所示:
如图所示 P 点就是目标图像 B 在 (X,Y) 处对应于源图像中的位置,P 的坐标位置会出现小数部分,所以我们假设 P 的坐标为 P(x+u,y+v),其中 x,y 分别表示整数部分,u,v 分别表示小数部分。那么我们就可以得到如图所示的最近 16 个像素的位置,在这里用 a(i,j)(i,j=0,1,2,3) 来表示。
双立方插值的目的就是通过找到一种关系,或者说系数,可以把这 16 个像素对于 P 处像素值的影响因子找出来,从而根据这个影响因子来获得目标图像对应点的像素值,达到图像缩放的目的。
BiCubic基函数形式如下:
二. python实现双三次插值算法
from PIL import Image
import numpy as np
import math
# 产生16个像素点不同的权重
def BiBubic(x):
x=abs(x)
if x<=1:
return 1-2*(x**2)+(x**3)
elif x<2:
return 4-8*x+5*(x**2)-(x**3)
else:
return 0
# 双三次插值算法
# dstH为目标图像的高,dstW为目标图像的宽
def BiCubic_interpolation(img,dstH,dstW):
scrH,scrW,_=img.shape
#img=np.pad(img,((1,3),(1,3),(0,0)),'constant')
retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)
for i in range(dstH):
for j in range(dstW):
scrx=i*(scrH/dstH)
scry=j*(scrW/dstW)
x=math.floor(scrx)
y=math.floor(scry)
u=scrx-x
v=scry-y
tmp=0
for ii in range(-1,2):
for jj in range(-1,2):
if x+ii<0 or y+jj<0 or x+ii>=scrH or y+jj>=scrW:
continue
tmp+=img[x+ii,y+jj]*BiBubic(ii-u)*BiBubic(jj-v)
retimg[i,j]=np.clip(tmp,0,255)
return retimg
im_path='../paojie.jpg'
image=np.array(Image.open(im_path))
image2=BiCubic_interpolation(image,image.shape[0]*2,image.shape[1]*2)
image2=Image.fromarray(image2.astype('uint8')).convert('RGB')
image2.save('BiCubic_interpolation.jpg')
三. 实验结果:
四. 参考内容:
https://www.cnblogs.com/wojianxin/p/12516762.html
https://blog.csdn.net/Ibelievesunshine/article/details/104942406
❼ python数据分析2:DataFrame对象
DataFrame对象:二维表数据结构,由行列数据组成的表格
常用index表示行,columns表示列
'''
语文 数学 英语
0 110 105 99
1 105 88 115
2 109 120 130
'''
# print(df.columns) # Index(['语文', '数学', '英语'], dtype='object')
# print(df.index) # Int64Index([0, 1, 2], dtype='int64')
# 遍历DataFrame数据的每一列
'''
0 110
1 105
2 109
Name: 语文, dtype: int64
0 105
1 88
2 120
Name: 数学, dtype: int64
0 99
1 115
2 130
Name: 英语, dtype: int64
'''
1.创建一个DataFrame对象
pandas.DataFrame(data,index,columns,dtype,)
# data表示数据,可以是ndarray数组,series对象、列表、字典等
# index表示行标签(索引)
# columns表示列标签(索引)
# dtype每一列数据的数据类型
# 用于复制数据
# 返回值DataFrame
通过二维数组创建成绩表
'''
语文 数学 英语
0 110 105 99
1 105 88 115
2 109 120 130
'''
2.通过字典创建DataFrame对象
value值只能是一维数组或单个的简单数据类型
# 数组,则要求所有的数组长度一致
# 单个数据,每行都需要添加相同数据
'''
语文 数学 英语 班级
0 110 105 109 高一7班
1 105 88 120 高一7班
2 99 115 130 高一7班
'''
'''
【DataFrame属性】
values 查看所有元素的值 df.values
dtypes 查看所有元素的类型 df.dtypes
index 查看所有行名、重命名行名 df.index df.index=[1,2,3]
columns 查看所有列名、重命名列名 df.columns df.columns=['语','数']
T 行列数据转换 df.T
head 查看前n条数据,默认5条 df.head() df.head(10)
tail 查看后n条数据,默认5条 df.tail() df.tail(10)
shape 查看行数和列数,[0]表示行,[1]表示列 df.shape[0] df.shape[1]
info 查看索引,数据类型和内存信息 df.info
【DataFrame函数】
describe 查看每列的统计汇总信息,DataFrame类型 df.describe()
count 返回每一列中的非空值的个数 df.count()
sum 返回每一列和和,无法计算返回空值 df.sum()
max 返回每一列的最大值 df.max()
min 返回每一列的最小值 df.min()
argmax 返回最大值所在的自动索引位置 df.argmax()
argmin 返回最小值所在的自动索引位置 df.argmin()
idxmax 返回最大值所在的自定义索引位置 df.idxmax()
idxmin 返回最小值所在的自定义索引位置 df.idxmin()
mean 返回每一列的平均值 df.mean()
median 返回每一列的中位数 df.median()
var 返回每一列的方差 df.var()
std 返回每一列的标准差 df.std()
isnull 检查df中的空值,空值为True,否则为False,返回布尔型数组 df.isnull()
notnull 检查df中的空值,非空值为True,否则为False,返回布尔型数组 df.notnull()
中位数又称中值,是指按顺序排列的一组数据中居于中间位置的数
方差用于度量单个随机变量的离散程序(不连续程度)
标准差是方差的算术平方根,反映数据集的离散程度
'''
3. 导入.xls或.xlsx文件
# pandas.read_excel(io,sheetname=0,header=0,names=None,index_col=None,usecols=None,squeeze=False,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skiprows=None,nrow=None,na_values=None,keep_defalut_na=True,verbose=False,parse_dates=False,date_parser=None,thousands=None,comment=None,skipfooter=0,conver_float=True,mangle_pe_cols=True,**kwds)
'''
io 字符串,xls或xlsx文件路径或类文件对象
sheet_name:None、字符串、整数、字符串行表或整数列表,默认值为0
字符串用于工作表名称;整数为索引,表示工作表位置
字符串行表或整数列表用于请求多个工作表,为None时则获取所有的工作表
sheet_name = 0 第一个Sheet页中的数据作为DataFrame对象
sheet_name = 1 第二个Sheet页中的数据作为DataFrame对象
sheet_name = 'Sheet1' 名为Sheet1的Sheet页中的数据作为DataFrame对象
sheet_name = [0,1,'Sheet3'] 第一个,第二个和名为Sheet3的Sheet页中的数据作为DataFrame对象
header:指定作为列名的行,默认值为0,即取第一行的值为列名。或数据不包含列名,则为header=None
names:默认值为None,要使用的列名列表
index_col:指定列为索引列,默认值为None,索引0是DataFrame对象的行标签
usecols:int、list或字符串,默认值为None
如为None,则解析所有列
如为int,则解析最后一列
如为list列表,则解析列号和列表的列
如为字符串,则表示以逗号分隔的Excel列字母和列范围列表
squeeze:布尔值,默认为False,如果解析的数据只包含一列,则返回一个Series
dtype:列的数据类型名称为字典,默认值为None
skiprows:省略指定行数的数据,从第一行开始
skipfooter:省略指定行数的数据,从尾部数的行开始
4.导入指定Sheet页的数据
# sheet_name=0表示第一个sheet页的数据,以此类推,如果不指定,则导入第一页
5.指定行索引导入Excel数据
'''
Empty DataFrame
Columns: []
Index: [1, 3, 5]
'''
# 导入第一列数据
'''
Empty DataFrame
Columns: []
Index: [1, 3, 5]
'''