㈠ python怎么生成三维数
importnumpyasnp
a=np.array([1,2,3],dtype=int)#创建1*3维数组array([1,2,3])
type(a)#numpy.ndarray类型
a.shape#维数信息(3L,)
a.dtype.name#'int32'
a.size#元素个数:3
a.itemsize#每个元素所占用的字节数目:4
b=np.array([[1,2,3],[4,5,6]],dtype=int)#创建2*3维数组array([[1,2,3],[4,5,6]])
b.shape#维数信息(2L,3L)
b.size#元素个数:6
b.itemsize#每个元素所占用的字节数目:4
c=np.array([[1,2,3],[4,5,6]],dtype='int16')#创建2*3维数组array([[1,2,3],[4,5,6]],dtype=int16)
c.shape#维数信息(2L,3L)
c.size#元素个数:6
c.itemsize#每个元素所占用的字节数目:2
c.ndim#维数
d=np.array([[1,2,3],[4,5,6]],dtype=complex)#复数二维数组
d.itemsize#每个元素所占用的字节数目:16
d.dtype.name#元素类型:'complex128'
importnumpyasnp
a=np.array([1,2,3],dtype=int)#创建1*3维数组array([1,2,3])
type(a)#numpy.ndarray类型
a.shape#维数信息(3L,)
a.dtype.name#'int32'
a.size#元素个数:3
a.itemsize#每个元素所占用的字节数目:4
b=np.array([[1,2,3],[4,5,6]],dtype=int)#创建2*3维数组array([[1,2,3],[4,5,6]])
b.shape#维数信息(2L,3L)
b.size#元素个数:6
b.itemsize#每个元素所占用的字节数目:4
c=np.array([[1,2,3],[4,5,6]],dtype='int16')#创建2*3维数组array([[1,2,3],[4,5,6]],dtype=int16)
c.shape#维数信息(2L,3L)
c.size#元素个数:6
c.itemsize#每个元素所占用的字节数目:2
c.ndim#维数
d=np.array([[1,2,3],[4,5,6]],dtype=complex)#复数二维数组
d.itemsize#每个元素所占用的字节数目:16
d.dtype.name#元素类型:'complex128'
a1=np.zeros((3,4))#创建3*4全零二维数组
输出:
array([[0.,0.,0.,0.],
[0.,0.,0.,0.],
[0.,0.,0.,0.]])
a1.dtype.name#元素类型:'float64'
a1.size#元素个数:12
a1.itemsize#每个元素所占用的字节个数:8
a2=np.ones((2,3,4),dtype=np.int16)#创建2*3*4全1三维数组
a2=np.ones((2,3,4),dtype='int16')#创建2*3*4全1三维数组
输出:
array([[[1,1,1,1],
[1,1,1,1],
[1,1,1,1]],
[[1,1,1,1],
[1,1,1,1],
[1,1,1,1]]],dtype=int16)
a3=np.empty((2,3))#创建2*3的未初始化二维数组
输出:(mayvary)
array([[1.,2.,3.],
[4.,5.,6.]])
a4=np.arange(10,30,5)#初始值10,结束值:30(不包含),步长:5
输出:array([10,15,20,25])
a5=np.arange(0,2,0.3)#初始值0,结束值:2(不包含),步长:0.2
输出:array([0.,0.3,0.6,0.9,1.2,1.5,1.8])
fromnumpyimportpi
np.linspace(0,2,9)#初始值0,结束值:2(包含),元素个数:9
输出:
array([0.,0.25,0.5,0.75,1.,1.25,1.5,1.75,2.])
x=np.linspace(0,2*pi,9)
输出:
array([0.,0.78539816,1.57079633,2.35619449,3.14159265,
3.92699082,4.71238898,5.49778714,6.28318531])
a=np.arange(6)
输出:
array([0,1,2,3,4,5])
b=np.arange(12).reshape(4,3)
输出:
array([[0,1,2],
[3,4,5],
[6,7,8],
[9,10,11]])
c=np.arange(24).reshape(2,3,4)
输出:
array([[[0,1,2,3],
[4,5,6,7],
[8,9,10,11]],
[[12,13,14,15],
[16,17,18,19],
[20,21,22,23]]])
使用numpy.set_printoptions可以设置numpy变量的打印格式
在ipython环境下,使用help(numpy.set_printoptions)查询使用帮助和示例
加法和减法操作要求操作双方的维数信息一致,均为M*N为数组方可正确执行操作。
a=np.arange(4)
输出:
array([0,1,2,3])
b=a**2
输出:
array([0,1,4,9])
c=10*np.sin(a)
输出:
array([0.,8.41470985,9.09297427,1.41120008])
n<35
输出:
array([True,True,True,True],dtype=bool)
A=np.array([[1,1],[0,1]])
B=np.array([[2,0],[3,4]])
C=A*B#元素点乘
输出:
array([[2,0],
[0,4]])
D=A.dot(B)#矩阵乘法
输出:
array([[5,4],
[3,4]])
E=np.dot(A,B)#矩阵乘法
输出:
array([[5,4],
[3,4]])
多维数组操作过程中的类型转换
When operating with arrays of different types, the type of the
resulting array corresponds to the more general or precise one (a
behavior known as upcasting)
即操作不同类型的多维数组时,结果自动转换为精度更高类型的数组,即upcasting
数组索引、切片和迭代
a=np.ones((2,3),dtype=int)#int32
b=np.random.random((2,3))#float64
b+=a#正确
a+=b#错误
a=np.ones(3,dtype=np.int32)
b=np.linspace(0,pi,3)
c=a+b
d=np.exp(c*1j)
输出:
array([0.54030231+0.84147098j,-0.84147098+0.54030231j,
-0.54030231-0.84147098j])
d.dtype.name
输出:
'complex128'
多维数组的一元操作,如求和、求最小值、最大值等
a=np.random.random((2,3))
a.sum()
a.min()
a.max()
b=np.arange(12).reshape(3,4)
输出:
array([[0,1,2,3],
[4,5,6,7],
[8,9,10,11]])
b.sum(axis=0)#按列求和
输出:
array([12,15,18,21])
b.sum(axis=1)#按行求和
输出:
array([6,22,38])
b.cumsum(axis=0)#按列进行元素累加
输出:
array([[0,1,2,3],
[4,6,8,10],
[12,15,18,21]])
b.cumsum(axis=1)#按行进行元素累加
输出:
array([[0,1,3,6],
[4,9,15,22],
[8,17,27,38]])
universal functions
B=np.arange(3)
np.exp(B)
np.sqrt(B)
C=np.array([2.,-1.,4.])
np.add(B,C)
其他的ufunc函数包括:
all,any,apply_along_axis,argmax,argmin,argsort,average,bincount,ceil,clip,conj,corrcoef,cov,cross,cumprod,cumsum,diff,dot,floor,inner,lexsort,max,maximum,mean,median,min,minimum,nonzero,outer,prod,re,round,sort,std,sum,trace,transpose,var,vdot,vectorize,where
a=np.arange(10)**3
a[2]
a[2:5]
a[::-1]#逆序输出
foriina:
print(i**(1/3.))
deff(x,y):
return10*x+y
b=np.fromfunction(f,(5,4),dtype=int)
b[2,3]
b[0:5,1]
b[:,1]
b[1:3,:]
b[-1]
c=np.array([[[0,1,2],[10,11,12]],[[100,101,102],[110,111,112]]])
输出:
array([[[0,1,2],
[10,11,12]],
[[100,101,102],
[110,111,112]]])
c.shape
输出:
(2L,2L,3L)
c[0,...]
c[0,:,:]
输出:
array([[0,1,2],
[10,11,12]])
c[:,:,2]
c[...,2]
输出:
array([[2,12],
[102,112]])
forrowinc:
print(row)
forelementinc.flat:
print(element)
a=np.floor(10*np.random.random((3,4)))
输出:
array([[3.,9.,8.,4.],
[2.,1.,4.,6.],
[0.,6.,0.,2.]])
a.ravel()
输出:
array([3.,9.,8.,...,6.,0.,2.])
a.reshape(6,2)
输出:
array([[3.,9.],
[8.,4.],
[2.,1.],
[4.,6.],
[0.,6.],
[0.,2.]])
a.T
输出:
array([[3.,2.,0.],
[9.,1.,6.],
[8.,4.,0.],
[4.,6.,2.]])
a.T.shape
输出:
(4L,3L)
a.resize((2,6))
输出:
array([[3.,9.,8.,4.,2.,1.],
[4.,6.,0.,6.,0.,2.]])
a.shape
输出:
(2L,6L)
a.reshape(3,-1)
输出:
array([[3.,9.,8.,4.],
[2.,1.,4.,6.],
[0.,6.,0.,2.]])
详查以下函数:
ndarray.shape,reshape,resize,ravel
a=np.floor(10*np.random.random((2,2)))
输出:
array([[5.,2.],
[6.,2.]])
b=np.floor(10*np.random.random((2,2)))
输出:
array([[0.,2.],
[4.,1.]])
np.vstack((a,b))
输出:
array([[5.,2.],
[6.,2.],
[0.,2.],
[4.,1.]])
np.hstack((a,b))
输出:
array([[5.,2.,0.,2.],
[6.,2.,4.,1.]])
fromnumpyimportnewaxis
np.column_stack((a,b))
输出:
array([[5.,2.,0.,2.],
[6.,2.,4.,1.]])
a=np.array([4.,2.])
b=np.array([2.,8.])
a[:,newaxis]
输出:
array([[4.],
[2.]])
b[:,newaxis]
输出:
array([[2.],
[8.]])
np.column_stack((a[:,newaxis],b[:,newaxis]))
输出:
array([[4.,2.],
[2.,8.]])
np.vstack((a[:,newaxis],b[:,newaxis]))
输出:
array([[4.],
[2.],
[2.],
[8.]])
np.r_[1:4,0,4]
输出:
array([1,2,3,0,4])
np.c_[np.array([[1,2,3]]),0,0,0,np.array([[4,5,6]])]
输出:
array([[1,2,3,0,0,0,4,5,6]])
详细使用请查询以下函数:
hstack,vstack,column_stack,concatenate,c_,r_
a=np.floor(10*np.random.random((2,12)))
输出:
array([[9.,7.,9.,...,3.,2.,4.],
[5.,3.,3.,...,9.,7.,7.]])
np.hsplit(a,3)
输出:
[array([[9.,7.,9.,6.],
[5.,3.,3.,1.]]),array([[7.,2.,1.,6.],
[7.,5.,0.,2.]]),array([[9.,3.,2.,4.],
[3.,9.,7.,7.]])]
np.hsplit(a,(3,4))
输出:
[array([[9.,7.,9.],
[5.,3.,3.]]),array([[6.],
[1.]]),array([[7.,2.,1.,...,3.,2.,4.],
[7.,5.,0.,...,9.,7.,7.]])]
实现类似功能的函数包括:
hsplit,vsplit,array_split
a=np.arange(12)
输出:
array([0,1,2,...,9,10,11])
notatall
b=a
bisa#True
b.shape=3,4
a.shape#(3L,4L)
deff(x)#,sofunctioncallsmakeno.
print(id(x))#id是python对象的唯一标识符
id(a)#111833936L
id(b)#111833936L
f(a)#111833936L
浅复制
c=a.view()
cisa#False
c.baseisa#True
c.flags.owndata#False
c.shape=2,6
a.shape#(3L,4L)
c[0,4]=1234
print(a)
输出:
array([[0,1,2,3],
[1234,5,6,7],
[8,9,10,11]])
s=a[:,1:3]
s[:]=10
print(a)
输出:
array([[0,10,10,3],
[1234,10,10,7],
[8,10,10,11]])
深复制
d=a.()
disa#False
d.baseisa#False
d[0,0]=9999
print(a)
输出:
array([[0,10,10,3],
[1234,10,10,7],
[8,10,10,11]])
numpy基本函数和方法一览
Array Creation
arange,array,,empty,empty_like,eye,fromfile,fromfunction,identity,linspace,logspace,mgrid,ogrid,ones,ones_like,r,zeros,zeros_like
Conversions
ndarray.astype,atleast_1d,atleast_2d,atleast_3d,mat
Manipulations
array_split,column_stack,concatenate,diagonal,dsplit,dstack,hsplit,hstack,ndarray.item,newaxis,ravel,repeat,reshape,resize,squeeze,swapaxes,take,transpose,vsplit,vstack
Questionsall,any,nonzero,where
Ordering
argmax,argmin,argsort,max,min,ptp,searchsorted,sort
Operations
choose,compress,cumprod,cumsum,inner,ndarray.fill,imag,prod,put,putmask,real,sum
Basic Statistics
cov,mean,std,var
Basic Linear Algebra
cross,dot,outer,linalg.svd,vdot
完整的函数和方法一览表链接:
https://docs.scipy.org/doc/numpy-dev/reference/routines.html#routines
㈡ python 读写nc格式数据
使用第三方类库 netCDF4
读取:
写入:
㈢ Python气象数据处理与绘图(1):数据读取
python很多库支持了对nc格式文件的读取,比如NetCDF4,PyNio(PyNio和PyNgl可以看做是NCL的Python版本)以及Xarray等等。
我最初使用PyNio,但是由于NCL到Python的移植并不完全,导致目前远不如直接使用NCL方便,而在接触Xarray库后,发现其功能强大远超NCL(也可能是我NCL太菜的原因)。
安装同其它库一致:
我这里以一套中国逐日最高温度格点资料(CN05.1)为例,其水平精度为0.5°X0.5°。
可以看到,文件的坐标有时间, 经度,纬度,变量有日最高温
我们将最高温数据取出
这与Linux系统中的ncl_filemp指令看到的信息是类似的
Xarray在读取坐标信息时,自动将时间坐标读取为了datetime64 格式,这对我们挑选目的时间十分方便。Xarray通常与pandas配合使用。
比如我们想选取1979.06.01-1979.06.20时期数据,我们只需
再比如我们想选取夏季数据时,只需
更多的时间操作同python的datetime函数类似。
当我们想选取特定经纬度范围(高度)的数据时,.loc[]函数同样可以解决。
在这里,我选取了40°N-55°N,115°E-135°E范围的数据
甚至,我们还可以套娃,同时叠加时间和范围的选取
这足够满足常用到的数据索引要求。
对于这类简单排列的.txt文件,可以通过np.load读取,用pandas的.read_csv更为方便
读取txt的同时,对每列赋予了一个列名,通过data.a可以直接按列名调用相应数据。
对于较复杂的.txt文件,仍可通过该函数读取
skiprows=5跳过了前5行的文件头,sep='\s+'定义了数据间隔为空格,这里用的是正则表达。
pd.read_csv函数有很多的参数,可以处理各种复杂情况下的文本文件读取。
grib文件可通过pygrib库读取
import pygrib
f = pygrib.open('xxx.grb')
㈣ Python气象数据处理进阶之Xarray(7):读写文件
前几文主要讲的是如何处理Xarray中的DataArray和DataSet,现在分享一下如何从nc文件或其他文件中读取数据,以及如何将处理好的数据输出成一个nc文件。
首先还是要再强调DataArray和DataSet的区别,DataArray是一个带标签结构的数组,DataSet是一个数据集,这意味着,从一个nc文件中读取到的全部信息构成了一个DataSet,而nc文件中的某一个变量是一个DataArray。
反之,我们要将一个数据写成nc文件,那么就是要创建一个DataSet。
这个数据结构有点像站点数据,对xy维设定了两层,分别是经纬度,还有一维时间维(whatever,反正是随便创建一个DataSet)。
就可以输出成nc文件了。
当然还可以更懒一点,
直接将abc这个DataArray转成DataSet,DataArray的标签和纬度信息会自动转换。
之后使用to_netcdf即可。
读取的语句也十分简单。
函数只需要基本的路径及文件名,无需像NCL一样声明状态'r'。
Xarray读取多文件也提供了相应函数(我目前没有使用过,我通常都是使用CDO提前处理,大家可以自行尝试)。
根据官方的介绍,Xarray也支持grib文件的读取。
前提是需要一个解码库"eccodes"
或者利用Xarray借助PYNIO去读。
官方文档中还有一部分是关于画图的,然而画图部分个人认为使用matplotlib+cartopy的组合更加灵活,因此Xarray系列到这里应该就完结了。
下一步的计划是按照魏凤英老师的统计方法一书,试着将常用的气象统计方法利用python去实现,但是水平实在有限。
㈤ 使用Python画出一个三维的函数图像,数据来自于一个Excel表格
可以的。 python利用matplotlib这个库,先定义一个空图层,然后声明x,y,z的值,x,y,z赋相应的列的值,最后建立标签,标题即可。最后,excel安装运行python的插件,运行python。
㈥ Python:numpy.array()创建三维以上数组
需求:根据已有的多个列表,利用numpy.array()函数创建三维以上数组
格式概述: 每一维用一个 [] 括起,不同维之间用 , 逗号间隔,最后总体再用 [] 括起!!!
说明 :列表肯定是一维的,多个列表一行一行堆叠形成二维,多个这样的二维构成三维,以此类推可得更高维矩阵(一般3维以上就不用numpy.array()这种方法创建了)。
注意 :高维数组,以三维(5,2,3)为例:前面的5代表页数,即表示(2,3)这样的二维矩阵有5个。即: 前面的数,永远代表比它"低一维"的数组有多少个 !
(1)创建二维数组的例子:
(2)创建三维数组的例子1:(2,3,3)
(3)创建三维数组的例子2:(4,2,3)
补充:最快验证自己创建的数组是否满足自己的维度需求的方式,就是看打印的结果中, 最外面有几个 ] 中括号,有几个 ] 就是几维数组 !如本文中第3个例子,打印结果最外层有3个 ],说明满足3维的要求。
㈦ 怎么用python的numpy模块和matplotlib模块把下面这些文本做一个3d的数据建模
你好,你现在那个图是一个连续的波形图,因为你提供的是具体的数据,没有xyz之间的关系公式,所以只能是画一个散点图。假设你已经将xyz都读进来了,下面是一个画三d散点图的例子。
from mpl_toolkits.mplot3d.axes3d import Axes3D
#绘制3维的散点图
x = np.random.randint(0,10,size=100) #用你X的数据来代替
y = np.random.randint(-20,20,size=100) #用你Y的数据来代替
z = np.random.randint(0,30,size=100) #用你的Z的数据来代替
# 此处fig是二维
fig = plt.figure()
# 将二维转化为三维
axes3d = Axes3D(fig)
# axes3d.scatter3D(x,y,z)
# 效果相同
axes3d.scatter(x,y,z)
㈧ 如何用python输出数据和远程nc主机交互
另外相机通常都是有MAC地址的。如果你发现它在你预计的MAC地址范围内,也可以知道是它。 相机是专业抓拍的。通常不会放在互联网上,应该是局域网。你可以排除局域网上的其它计算机,自然了也就知道哪些是相机了。
这些都不是难题。你首先扫描所有的IP地址。再扫描它们的端口数量。如果端口数量多通常是计算机,如果端口只有1-2个就是专业设备。扫描不到的,应该就是计算机啦。