python扩充库之numpy

1、NumPy简介:

NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- NumericalPython。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。

2、NumPy常见操作

NumPy中存在两种不同的数据结构Matrix 和 Array都可用于处理行列型数据,但是本质类型是有区别的

2.1、创建矩阵

#将numpy中所有的模块引入当前命名空间
from numpy import *

n_arry = random.rand(4,4) #生成4*4随机数组
print(n_arry)
print(type(n_arry))

#调用mat()可以实现降数组转化为矩阵
n_mat  = mat(n_arry)
print(n_mat)
print(type(n_mat))

#.I为矩阵的求逆操作
invRandMat = n_mat.I
print(invRandMat)
#eye()创建单位矩阵 
d_mat = eye(4,4)
print(eye(4,4),invRandMat*n_mat,sep='\n')

2.1.2、数组 

#数组操作
import numpy as np 
n_array = np.array([[1,2,3],  #np.array()返回数组 一般使用list形式使用
					[4,5,6]])
print(n_array)
#[[1 2 3]
# [4 5 6]]

#生成三行四列全为0的矩阵
z_array = np.zeros((3,4))
print(z_array)
print(type(z_array))

#生成三行四列全为1的矩阵
o_array = np.ones((3,4))
print(o_array)
print(type(o_array))

###############3
a = np.array([2,34,4],dtype=np.int64 )
print(a.dtype)

b = np.array([[2,34,4],
		[2,32,4]])
print(b)

c = np.zeros((3,4))
print(c)

d = np.ones((3,4))
print(d)

e = np.arange(10,20,2)
print(e)

f = np.arange(12).reshape((3,4))
print(f)

g = np.linspace(1,10,20).reshape((4,5))
print(g)

2.2、常见属性

#ndim 维度信息
print('number of dim:',n_array.ndim)  #number of dim: 2

#shape 形状
print('shape:',n_array.shape)         #shape: (2, 3)
#size 数据元素个数
print('size:',n_array.size)           #size: 6

#array dtype=np.int /np.int32/np.float32/np.float  数据类型
print(n_array.dtype)

2.3、常见运算

#numpy_calc
import numpy as np 
a = np.array([10,20,30,40])
b = np.arange(4)
print(a)
print(b)
print(a+b)
print(a-b)
print(a**2)
# [10 20 30 40]
# [0 1 2 3]
# [10 21 32 43]
# [10 19 28 37]
# [ 100  400  900 1600]

print(10*np.sin(a))
print(10*np.cos(a))
# [-5.44021111  9.12945251 -9.88031624  7.4511316 ]
# [-8.39071529  4.08082062  1.5425145  -6.66938062]


print(b<3)
# [ True  True  True False]


a = np.array([[1,1]
			,[0,1]])
b = np.arange(4).reshape((2,2))

c = a*b   #逐个相乘
d = np.dot(a,b) #矩阵乘法
#等价于 d = a.dot(b)

print(c)
print(d)
# [[0 1]
#  [0 3]]
# [[2 4]
#  [2 3]]

a = np.random.random((2,4))

print(a)
print(np.sum(a))
print(np.min(a))
print(np.max(a))
print(np.sum(a,axis=1)) #行求
print(np.sum(a,axis=0)) #列求
# [[0.50340378 0.77212362 0.01905615 0.09390617]
#  [0.63426158 0.67963863 0.38767069 0.5702104 ]]
# 3.6602710217425374
# 0.019056149732405103
# 0.7721236229908786
# [1.38848973 2.2717813 ]
# [1.13766536 1.45176225 0.40672684 0.66411657]


A = np.arange(2,14).reshape(3,4)

print(A)
print(np.average(A)) #平均
print(np.median(A)) #中位
print(np.cumsum(A)) #累加
print(np.diff(A))#累差
# [[ 2  3  4  5]
#  [ 6  7  8  9]
#  [10 11 12 13]]
# 7.5
# 7.5
# [ 2  5  9 14 20 27 35 44 54 65 77 90]
# [[1 1 1]
#  [1 1 1]
#  [1 1 1]]

#非零
print(np.nonzero(A))

#转置
print(np.transpose(A))
print(A.T)

#clip 
print(np.clip(A,5,9))  #小于5的表示为5,大于9的表示为9
# [[5 5 5 5]
#  [6 7 8 9]
#  [9 9 9 9]]

2.4、与torch相关操作

#numpy_torch

import torch
import numpy as np

np_data = np.arange(6).reshape((2,3))  #return 0 ~5 的一维数组。通过reshape改编为二维数组
torch_data = torch.from_numpy(np_data) #实现numpy数据转换为torch
tensor2array = torch_data.numpy()

print(
	'\nnumpy',np_data,
	'\ntorch',torch_data,
	'\ntensor2array',tensor2array
	)

#abs
data = [-1,-2,1,2]
tensor = torch.FloatTensor(data) #32 bit 
print(
	'\nabs',
	'\nnumpy',np.abs(data),      #[1,2,1,2]
	'\ntorch',torch.abs(tensor)  #[1,2,1,2]
	)

#sin
print(
	'\nsin',
	'\nnumpy',np.sin(data),      #[1,2,1,2]
	'\ntorch',torch.sin(tensor)  #[1,2,1,2]
	)
#matrixmult

data = [[1,2],[3,4]] #矩阵
tensor = torch.FloatTensor(data)
print(
	"\nnumpy",np.matmul(data,data),
	"\ntorch",torch.mm(tensor,tensor)
	)

2.5、分割操作

import numpy as np 

A = np.arange(12).reshape((3,4))

print(A)

print(np.split(A,2,axis=1))  #等量分割
print(np.array_split(A,3,axis=1))  #不等量分割

print(np.vsplit(A,3))   #纵向分为三块
print(np.hsplit(A,2))	#横向分为2块

2.6、合并操作

import numpy as np 

A = np.array([1,1,1])
B = np.array([2,2,2])

#水平竖直合并
C = np.vstack((A,B))  #vertical stack
D = np.hstack((A,B))  #horizontal stack
print(C)
print(A.shape,C.shape)

print(D)
print(A.shape,D.shape)

A = A[:,np.newaxis]
print(A)


E = np.concatenate()


2.7、索引

import numpy as np 

A = np.arange(3,15) #以为数组

print(A)
print(A[3])
# [ 3  4  5  6  7  8  9 10 11 12 13 14]
# 6

A = A.reshape((3,4))  #重新更新维度

print(A)
# [[ 3  4  5  6]
#  [ 7  8  9 10]
#  [11 12 13 14]]

print(A[2])
# [11 12 13 14]

#一下两种方法等价
print(A[2][1])
print(A[2,1])
# 12
# 12

#第三行的所有数
print(A[2,:])
#第一列所有数
print(A[:,0])
# [11 12 13 14]
# [ 3  7 11]

#第一行,第二列到第四列数字
print(A[0,1:3])
# [4 5]

#行迭代
for row in A:
	print(row)
#列迭代
for col in A.T:
	print(col)
# [3 4 5 6]
# [ 7  8  9 10]
# [11 12 13 14]
# [ 3  7 11]
# [ 4  8 12]
# [ 5  9 13]
# [ 6 10 14]

print(A.flatten())
#迭代每一项
for item in A.flat:
	print(item)



2.8、复制

import numpy as np  

a = np.arange(4)
b = a   #关联,类似c语言指针
print(a)

a[0] = 12

print(a)

print(b is a)

c = a.copy()  #数值复制
print(c)
a[0] = 13
发布了46 篇原创文章 · 获赞 1 · 访问量 5745

猜你喜欢

转载自blog.csdn.net/Happy_Yu_Life/article/details/90751740