Python-numpy(1)创建,访问,索引

        NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

参考链接:

NumPy 教程 | 菜鸟教程https://www.runoob.com/numpy/numpy-tutorial.html

'''
数组的创建,类型,属性,访问,索引
'''
from numpy import *
import numpy as np
print("----------------数组-------------------")
eye_1=eye(3)
print("eye(3)生成对角矩阵:\n",eye_1)
'''
eye(3)生成对角矩阵:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
'''
a=np.array([1,2,3])
print("一维数组np.array([1,2,3]):\n",a)
'''
一维数组np.array([1,2,3]):
 [1 2 3]
'''
aa=np.array([[1,2],[3,4]])
print("二维数组np.array([[1,2],[3,4]]):\n",aa)
'''
二维数组np.array([[1,2],[3,4]]):
 [[1 2]
 [3 4]]
'''
b=np.array([1,2,3,4,5,6],ndmin=3)
print("最小纬度np.array([1,2,3,4],ndmin=3):\n",b)
'''
最小纬度np.array([1,2,3,4],ndmin=3):
 [[[1 2 3 4 5 6]]]
'''
print("----------------数据类型-------------------")
bb=np.array([1,2,3],dtype=complex)
print("数类型np.array([1,2,3],dtype=complex):\n",bb)
'''
数类型np.array([1,2,3],dtype=complex):
 [1.+0.j 2.+0.j 3.+0.j]
'''
# int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替
dt=np.dtype([('name','S20'),('age','i1')])#字符串字段 name(20个字符),整数字段 age
dt_a=np.array([('Jack',10),('Andy',20),('Lucy',30)])
dt_b=np.array([('Jack',10),('Andy',20),('Lucy',30)],dtype=dt)#将数据类型应用于 ndarray 对象
print("dt:\n",dt)
print("数类型np.array([('Jack',10),('Andy',20),('Lucy',30)]):\n",dt_a)
print("np.array([('Jack',10),('Andy',20),('Lucy',30)],dtype=dt):\n",dt_b)
print("dt_b['age']:\n",dt_b['age'])
print("dt_b['name']:\n",dt_b['name'])
'''
dt:
 [('name', 'S20'), ('age', 'i1')]
数类型np.array([('Jack',10),('Andy',20),('Lucy',30)]):
 [['Jack' '10']
 ['Andy' '20']
 ['Lucy' '30']]
np.array([('Jack',10),('Andy',20),('Lucy',30)],dtype=dt):
 [(b'Jack', 10) (b'Andy', 20) (b'Lucy', 30)]
dt_b['age']:
 [10 20 30]
dt_b['name']:
 [b'Jack' b'Andy' b'Lucy']
'''
print("----------------数组属性-------------------")
a_ndim=np.arange(24,dtype = np.int16)
print("1个维度,np.arange(24):\n",a_ndim)
b_ndim=a_ndim.reshape(2,3,4)
print("3个维度,a_ndim.reshape(2,4,3):\n",b_ndim)
print("b_ndim[1][2][3]:",b_ndim[1][2][3])
print("每个元素占用字节数,b_ndim.itemsize:",a_ndim.itemsize)
'''
1个维度,np.arange(24):
 [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
3个维度,a_ndim.reshape(2,3,4):
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
b_ndim[1][2][3]: 23
每个元素占用字节数,b_ndim.itemsize: 2
'''

print("----------------创建数组-------------------")
x_empty=np.empty([3,2],dtype=int)#创建空数组,数组元素为随机值,因为它们未初始化
print("空数组-np.empty([3,2],dtype=int):\n",x_empty)
'''
空数组-np.empty([3,2],dtype=int):
 [[0 0]
 [0 0]
 [0 0]]
'''
#zeros,ones创建0和1的数组
z=np.zeros((3,2),dtype=[('x','i4'),('y','float64'),('z','S10')])
print("np.zeros((3,2),dtype=[('x','i4'),('y','float64'),('z','S10')]):\n",z)
'''
np.zeros((3,2),dtype=[('x','i4'),('y','float64'),('z','S10')]):
 [[(0, 0., b'') (0, 0., b'')]
 [(0, 0., b'') (0, 0., b'')]
 [(0, 0., b'') (0, 0., b'')]]
'''

print("----------------从已有的数组创建数组-------------------")
x_list = [1,2,3]
y_tuple=[(1,2,3),(4,5,6)]
x_array=np.asarray(x_list)#列表list转换为数组ndarray,numpy.asarray(a, dtype = None, order = None)
y_array=np.asarray(y_tuple,dtype=[('x','i4'),('y','float64'),('z','S10')])#元组tuple转换为数组ndarray
print("x_list:",x_list)
print("x_array:",x_array)
print("y_tuple:",y_tuple)
print("y_array:",y_array)
'''
x_list: [1, 2, 3]
x_array: [1 2 3]
y_tuple: [(1, 2, 3), (4, 5, 6)]
y_array: [(1, 2., b'3') (4, 5., b'6')]
'''
string=b'frombuffer'
array_s=np.frombuffer(string,dtype='S2')#numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
print("以流的形式创建数组-np.frombuffer(string,dtype='S2'):",array_s)
'''
以流的形式创建数组-np.frombuffer(string,dtype='S2'): [b'fr' b'om' b'bu' b'ff' b'er']
'''
list=range(0,10,2)#建立迭代对象-等差序列range
iter_i=iter(list)#iter迭代
x=np.fromiter(iter_i,dtype=float)#numpy.fromiter(iterable, dtype, count=-1)
print("通过迭代创建数组fromiter:",x)
'''
通过迭代创建数组fromiter: [0. 2. 4. 6. 8.]
'''

print("----------------从数值范围创建数组-------------------")
x_array=np.arange(10,21,2)#给定step的等差数列numpy.arange(start, stop, step, dtype)
print("step=2np.arange(10,20,2):",x_array)
'''
step=2等差-np.arange(10,20,2): [10 12 14 16 18 20]
'''
y_array=np.linspace(0,20,5,endpoint=True,dtype=int8)#给定个数的等差数列,np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
print("5个等差-np.linspace(0,20,5):",y_array)
'''
5个等差-np.linspace(0,20,5): [ 0  5 10 15 20]
'''
z_array=np.logspace(1.0,2.0,num = 4,base=2) #np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
print("np.logspace(1.0,  2.0, num = 10):\n",z_array)
'''
np.logspace(1.0,2.0,num = 4,base=2): 
[2.        2.5198421 3.1748021 4.       ]
'''

print("----------------切片和索引-------------------")
a=np.arange(10)
s=slice(2,7,2)# 从索引 2 开始到索引 7 停止,间隔为2
print("a[slice(2,7,2)]:",a[s])
b=a[2:7:2]#冒号分隔切片参数 start:stop:step
print("a[2:7:2]:",b)
c=a[:3]
print("a[:3]:",c)
d=a[3:]
print("a[3:]:",d)
'''
a[slice(2,7,2)]: [2 4 6]
a[2:7:2]: [2 4 6]
a[:3]: [0 1 2]
a[3:]: [3 4 5 6 7 8 9]
'''
a=np.array([[1,2,3],[4,5,6],[7,8,9]])#建立3*3的array
print("a:\n",a)
print("第2列元素:",a[...,1])# 第2列元素
print("第2行元素:",a[1,...])# 第2行元素
print("第2列及剩下的所有元素:\n",a[...,1:])# 第2列及剩下的所有元素
'''
a:
 [[1 2 3]
 [4 5 6]
 [7 8 9]]
第2列元素: [2 5 8]
第2行元素: [4 5 6]
第2列及剩下的所有元素:
 [[2 3]
 [5 6]
 [8 9]] 
'''
print("----------------高级索引-------------------")
x = np.array([[0,np.nan,2],[3,np.nan,5],[6,7,8],[9,10,11]])
print("x=\n",x)
y=x[[0,1,2],[0,1,0]]#获取数组中(0,0),(1,1)和(2,0)位置处的元素
print("x[[0,1,2],[0,1,0]]:",y)
rows2=np.array([[0,0],[3,3]])#行索引是 [0,0] 和 [3,3]
cols2=np.array([[0,2],[0,2]])#列索引是 [0,2] 和 [0,2]
y2 = x[rows2,cols2]
print("x[rows2,cols2]:\n",y2)
rows3=np.array([0,0,3,3])#行索引是 [0,0] 和 [3,3]
cols3=np.array([0,2,0,2])#列索引是 [0,2] 和 [0,2]
y3 = x[rows3,cols3]
print("x[rows3,cols3]:\n",y3)
y4=x[1:3,1:3]
print("切片索引x[1:3,1:3]:\n",y4)
y4=x[1:3,[1,2]]
print("切片索引x[1:3,[1,2]]:\n",y4)
y5=x[...,1:]
print("切片索引x[...,1:]:\n",y5)
y6=x[x>5].reshape(2,3)
print("布尔索引x[x>5].reshape(2,3):\n",y6)
y7_temp=x.reshape(1,12)#转换为1维数组
y7=y7_temp[~np.isnan(y7_temp)]#使用了 ~(取补运算符)来过滤 nan
print("过滤 NaN,y7_temp[~np.isnan(y7_temp)]:\n",y7)
'''
x=
 [[ 0. nan  2.]
 [ 3. nan  5.]
 [ 6.  7.  8.]
 [ 9. 10. 11.]]
x[[0,1,2],[0,1,0]]: [ 0. nan  6.]
x[rows2,cols2]:
 [[ 0.  2.]
 [ 9. 11.]]
x[rows3,cols3]:
 [ 0.  2.  9. 11.]
切片索引x[1:3,1:3]:
 [[nan  5.]
 [ 7.  8.]]
切片索引x[1:3,[1,2]]:
 [[nan  5.]
 [ 7.  8.]]
切片索引x[...,1:]:
 [[nan  2.]
 [nan  5.]
 [ 7.  8.]
 [10. 11.]]
布尔索引x[x>5].reshape(2,3):
 [[ 6.  7.  8.]
 [ 9. 10. 11.]]
过滤 NaN,y7_temp[~np.isnan(y7_temp)]:
 [ 0.  2.  3.  5.  6.  7.  8.  9. 10. 11.]
'''

print("----------------广播(Broadcast)-------------------")
a=np.array([1,2,3,4])
b=np.array([10,20,30,40])
f=np.array([[1],[2]])
d=np.array([[1,2,3,4],[5,6,7,8]])
c=a*b
e=f*d
print("np.array([1,2,3,4]) * np.array([10,20,30,40]):\n",c)
print("np.array([[1],[2]]) * np.array([[1,2,3,4],[5,6,7,8]]):\n",e)
'''
np.array([1,2,3,4]) * np.array([10,20,30,40]):
 [ 10  40  90 160]
np.array([[1],[2]]) * np.array([[1,2,3,4],[5,6,7,8]]):
 [[ 1  2  3  4]
 [10 12 14 16]]
'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值