python基础之numpy
来源:互联网 发布:php数组最大长度限制 编辑:程序博客网 时间:2024/05/22 15:47
附教程链接:https://mohttps://morvanzhou.github.io/tutorials/data-manipulation/np-pd/rvanzhou.github.io/tutorials/data-manipulation/np-pd/
In[1]:
import numpy as np #为了方便使用numpy 采用np简写
In[2]:
array = np.array([[1,2,3],[2,3,4]]) #列表转化为矩阵
print(array)
“””
array([[1, 2, 3],
[2, 3, 4]])
“”“
In[3]:
print(‘number of dim:’,array.ndim) # 维度
number of dim: 2
print(‘shape :’,array.shape) # 行数和列数
shape : (2, 3)
print(‘size:’,array.size) # 元素个数
size: 6
In[4]:
创建数组
a = np.array([2,23,4]) # list 1d
print(a)
In[5]:
指定数据dtype
a = np.array([2,23,4],dtype=np.int)
print(a.dtype)
int 64
a = np.array([2,23,4],dtype=np.int32)
print(a.dtype)
int32
a = np.array([2,23,4],dtype=np.float)
print(a.dtype)
float64
a = np.array([2,23,4],dtype=np.float32)
print(a.dtype)
float32
In[8]:
创建特定数据
a = np.array([[2,23,4],[2,32,4]]) # 2d 矩阵 2行3列
print(a)
“””
[[ 2 23 4]
[ 2 32 4]]
“””
a = np.zeros((3,4)) # 数据全为0,3行4列
“””
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
“””
print(a)
a = np.ones((3,4),dtype = np.int) # 数据为1,3行4列
print(a)
“””
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
“”“
a = np.empty((3,4)) # 数据为empty(接近0),3行4列
print(a)
“””
array([[ 0.00000000e+000, 4.94065646e-324, 9.88131292e-324,
1.48219694e-323],
[ 1.97626258e-323, 2.47032823e-323, 2.96439388e-323,
3.45845952e-323],
[ 3.95252517e-323, 4.44659081e-323, 4.94065646e-323,
5.43472210e-323]])
“”“
a = np.arange(10,20,2) # 10-19 的数据,2步长
print(a)
“””
array([10, 12, 14, 16, 18])
“”“
a = np.arange(12).reshape((3,4)) # 3行4列,0到11
print(a)
“””
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
“”“
a = np.linspace(1,10,20) # 开始端1,结束端10,且分割成20个数据,生成线段
print(a)
“””
array([ 1. , 1.47368421, 1.94736842, 2.42105263,
2.89473684, 3.36842105, 3.84210526, 4.31578947,
4.78947368, 5.26315789, 5.73684211, 6.21052632,
6.68421053, 7.15789474, 7.63157895, 8.10526316,
8.57894737, 9.05263158, 9.52631579, 10. ])
“”“
a = np.linspace(1,10,20).reshape((5,4)) # 更改shape
print(a)
“””
array([[ 1. , 1.47368421, 1.94736842, 2.42105263],
[ 2.89473684, 3.36842105, 3.84210526, 4.31578947],
[ 4.78947368, 5.26315789, 5.73684211, 6.21052632],
[ 6.68421053, 7.15789474, 7.63157895, 8.10526316],
[ 8.57894737, 9.05263158, 9.52631579, 10. ]])
“”“
In[9]:
Numpy 基础运算1
a=np.array([10,20,30,40]) # array([10, 20, 30, 40])
b=np.arange(4) # array([0, 1, 2, 3])
c=a-b
print(c)# array([10, 19, 28, 37])
c=a+b
print(c)# array([10, 21, 32, 43])
c=a*b
print(c)# array([ 0, 20, 60, 120])
c=b**2
print(c)# array([0, 1, 4, 9])
c=10*np.sin(a)
print(c) # array([-5.44021111, 9.12945251, -9.88031624, 7.4511316 ])
print(b<3) # array([ True, True, True, False], dtype=bool)
a=np.array([[1,1],[0,1]])
b=np.arange(4).reshape((2,2))
print(a)
array([[1, 1],
[0, 1]])
print(b)
array([[0, 1],
[2, 3]])
c_dot = np.dot(a,b)
array([[2, 4],
[2, 3]])
c_dot_2 = a.dot(b)#另外的一种关于dot的表示方法
array([[2, 4],
[2, 3]])
In[11]:
a=np.random.random((2,4))
print(a)
c=np.sum(a)
print(c)
c=np.min(a)
print(c)
c=np.max(a)
print(c)
print(“a =”,a)
print(“sum =”,np.sum(a,axis=1))#axis的值为0的时候,将会以列作为查找单元, 当axis的值为1的时候,将会以行作为查找单元。
print(“min =”,np.min(a,axis=0))
print(“max =”,np.max(a,axis=1))
In[12]:
Numpy 基础运算2:
A = np.arange(2,14).reshape((3,4))
array([[ 2, 3, 4, 5]
[ 6, 7, 8, 9]
[10,11,12,13]])
print(np.argmin(A)) # 0
print(np.argmax(A)) # 11
中的 argmin() 和 argmax() 两个函数分别对应着求矩阵中最小元素和最大元素的索引。
相应的,在矩阵的12个元素中,最小值即2,对应索引0,最大值为13,对应索引为11。
In[13]:
print(np.mean(A)) # 7.5 求均值的三种方法
print(np.average(A)) # 7.5
print(A.mean()) # 7.5
In[16]:
print(np.cumsum(A))
在cumsum()函数中:生成的每一项矩阵元素均是从原矩阵首项累加到对应项的元素之和。
比如元素9,在cumsum()生成的矩阵中序号为3,即原矩阵中2,3,4三个元素的和。
[2 5 9 14 20 27 35 44 54 65 77 90]
In[17]:
print(np.diff(A))
该函数计算的便是每一行中后一项与前一项之差。
[[1 1 1]
[1 1 1]
[1 1 1]]
In[18]:
print(np.nonzero(A))
这个函数将所有非零元素的行与列坐标分割开,重构成两个分别关于行和列的矩阵。
(array([0,0,0,0,1,1,1,1,2,2,2,2]),array([0,1,2,3,0,1,2,3,0,1,2,3]))
即非0的元素有A01 A02 A03 A04 A11……
In[19]:
A = np.arange(14,2, -1).reshape((3,4))
我们可以对所有元素进行仿照列表一样的排序操作,但这里的排序函数仍然仅针对每一行进行从小到大排序操作
array([[14, 13, 12, 11],
[10, 9, 8, 7],
[ 6, 5, 4, 3]])
print(np.sort(A))
array([[11,12,13,14]
[ 7, 8, 9,10]
[ 3, 4, 5, 6]])
In[24]:
矩阵的转置有两种表示方法
print(np.transpose(A),’\n’)
print(A.T)
array([[14,10, 6]
[13, 9, 5]
[12, 8, 4]
[11, 7, 3]])
array([[14,10, 6]
[13, 9, 5]
[12, 8, 4]
[11, 7, 3]])
In[29]:
在Numpy中具有clip()函数 这个函数的格式是clip(Array,Array_min,Array_max),
顾名思义,Array指的是将要被执行用的矩阵,
而后面的最小值最大值则用于让函数判断矩阵中元素是否有比最小值小的或者比最大值大的元素,
并将这些指定的元素转换为最小值或者最大值。
print(A,’\n’)
array([[14,13,12,11]
[10, 9, 8, 7]
[ 6, 5, 4, 3]])
print(np.clip(A,5,9))
array([[ 9, 9, 9, 9]
[ 9, 9, 8, 7]
[ 6, 5, 5, 5]])
In[30]:
Numpy 索引
A = np.arange(3,15)
array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
print(A[3]) # 6
In[31]:
A = np.arange(3,15).reshape((3,4))
“””
array([[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]])
“”“
print(A[2])
[11 12 13 14] A[2]对应的就是矩阵A中第三行(从0开始算第一行)的所有元素。
In[33]:
print(A[1][1]) # 表示具体的单个元素,有两种方法
print(A[1, 1]) # 8
In[34]:
print(A[1, 1:3]) # [8 9] 切片 针对第二行中第2到第4列元素进行切片输出(不包含第4列)。矩阵下标从0开始,切前不切后。
In[35]:
for row in A:
print(row)#它会逐行进行打印操作
“””
[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]
“”“
In[36]:
for column in A.T:
print(column) #对A进行转置,再将得到的矩阵逐行输出即可得到原矩阵的逐列输出
“””
[ 3, 7, 11]
[ 4, 8, 12]
[ 5, 9, 13]
[ 6, 10, 14]
“”“
In[38]:
A = np.arange(3,15).reshape((3,4))
print(A.flatten())
array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
for item in A.flat:
print(item) #flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列。而flat是一个迭代器,本身是一个object属性
3
4
…
14
In[51]:
Numpy array 合并
A = np.array([1,1,1])
B = np.array([2,2,2])
print(A,’\n’) #这里的A是数组。不是矩阵。
print(np.vstack((A,B))) # vertical stack
“””
[[1,1,1]
[2,2,2]]
“”“
vertical stack本身属于一种上下合并,即对括号中的两个整体进行对应操作。此时我们对组合而成的矩阵进行属性探究:
In[49]:
D = np.hstack((A,B)) # horizontal stack
print(D)
[1,1,1,2,2,2]
print(A.shape,D.shape)
这里的shape后面不要加()否则会报错
(3,) (6,)
D本身来源于A,B两个数列的左右合并,而且新生成的D本身也是一个含有6项元素的序列。
In[57]:
A是序列, 转置操作便很有可能无法对其进行转置(因为A并不是矩阵的属性),此时就需要我们借助其他的函数操作进行转置
print(A[np.newaxis])
“””
The newaxis object can be used in all slicing operations to create an axis of length one.
newaxis is an alias for ‘None’, and ‘None’ can be used in place of this with the same result.
[[1 1 1]]
“””
print(A[np.newaxis,:].shape)
(1,3)
print(A[:,np.newaxis])
逗号前创建行,逗号后创建列
“””
[[1]
[1]
[1]]
“””
print(A[:,np.newaxis].shape)
(3,1)
In[60]:
综合起来
A = np.array([1,1,1])[np.newaxis,:]
B = np.array([2,2,2])[np.newaxis,:]
C = np.vstack((A,B)) # vertical stack
D = np.hstack((A,B)) # horizontal stack
print(C,’\n’)
print(D,’\n’)
print(A.shape,D.shape)
In[61]:
C = np.concatenate((A,B,B,A),axis=0)
你的合并操作需要针对多个矩阵或序列时,借助concatenate函数可能会让你使用起来比前述的函数更加方便
axis参数很好的控制了矩阵的纵向或是横向打印,0是上下打印,1是左右。
print(C,’\n’)
D = np.concatenate((A,B,B,A),axis=1)
print(D)
In[69]:
Numpy array 切片
A = np.arange(12).reshape((3, 4))
print(A)
print(A[0:2:1,0:2:1])#逗号前对行切片,逗号后对列切片
print(A[0:2:1,0:3:1])
In[72]:
Numpy array 分割
A = np.arange(12).reshape((3, 4))
print(A)
print(np.split(A, 2, axis=1))#纵向分割 平均切成两份
print(np.split(A, 3, axis=0))#横向分割 注 0是上下切,即切成行 1是左右切,即切成列 而且只能对等切 即切成两边都相同的
In[89]:
print(np.array_split(A, 2, axis=1))#不等量的分割
print(np.array_split(A, [1,2], axis=1))#制定切割位置
In[90]:
其他的分割方式
print(np.vsplit(A, 3)) #等于 print(np.split(A, 3, axis=0))
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
print(np.hsplit(A, 2)) #等于 print(np.split(A, 2, axis=1))
“””
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
“”“
In[92]:
Numpy copy & deep copy
a = np.arange(4)
array([0, 1, 2, 3])
b = a
c = a
d = b
print(a,’\n’,b,’\n’,c,’\n’,d,’\n’)
= 的赋值方式会带有关联性 改变a的第一个值,b、c、d的第一个值也会同时改变。
a[0] = 11
print(a)
array([11, 1, 2, 3])
print(b,’\n’,c,’\n’,d,’\n’)
同样更改d的值,a、b、c也会改变。
In[93]:
copy()的赋值方式没有关联性
b = a.copy() # deep copy
print(b) # array([11, 22, 33, 3])
a[3] = 44
print(a) # array([11, 22, 33, 44])
print(b) # array([11, 22, 33, 3])
- python基础之numpy
- python学习之NumPy基础
- python numpy基础-
- python numpy 基础2
- python NumPy函数库基础
- Python-NumPy基础
- Python基础-numpy使用
- python-NumPy基础
- Python--Numpy基础
- python numpy基础
- python numpy基础(一)
- python numpy基础
- Python之numpy教程(一):基础概念
- python之基础numpy库使用(一)
- python之基础numpy库使用(二)
- python之基础numpy库使用(三)
- python之Numpy使用
- Python模块之NumPy
- css html 如何将图片img标签 水平居中 垂直居中 和水平垂直居中,能自适应浏览器缩放。
- Android全沉浸式的方式
- keil ucosiii工程改为 iar工程
- WebService与使用风格RPC/SOA/REST
- Python: decorator
- python基础之numpy
- 【PAT】【Advanced Level】1027. Colors in Mars (20)
- 下一代 Web 应用模型 —— Progressive Web App
- 解决远程连接mysql错误1130 远程连接Mysql服务器的数据库,错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to co
- centos上GITLAB的搭建
- 读书笔记:Android开发艺术探索之第6章 android的Drawable
- STL算法之count. count_if
- SpringMVC导出CSV文件中文出现乱码解决方案
- Spring 依赖注入