numpy模块

numpy模块:

--对numpy数值---矩阵进行科学运算
--数据分析
--tensorflow/pytorch ---张量进行科学运算
kaggle / 天池 /acm
import numpy as np
gpu -->图形显卡0---图形存储

--->numpy数组--可变
#---一维
arrl = np.array([1,2,4,6])  #[可迭代]
#二维
arr = np.array([[1,2,4],[7,8,9]])
#三维 ---》tensorflow

#属性:
T  行位互换
dtype  #数组元素的数据类型,numpy数组属于python
ndim 维数
shape 维度大小(元组)
astype 类型转换

切割数组:
print(arr[:,:]) #行,列--从零开始,不要最后的
--》有步长
赋值:
print(arr[:,:] = 0)
--》逻辑取值

--数组合并:
np.hstack((arr1,arr2))  水平
np.vstack((arr1,arr2))   垂
np.concatenate(((arr1,arr2),axis=0/1))

numpy模块:

--是python中一种开源的数值计算扩展库。可以用来存储和处理大型numpy数组。

用途:
1.区别于list1列表。提供了数组操作,数组运算,及统计分布和简单的数学模型

2.计算速度快,甚至要优于python内置的简单运算, 使得其成为pandas、sklearn等模块的依赖包。 高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似。

为什么用numpy?

list1 =[1,2,3]
list2 = [4,5,6]
--list1 * list2
lis_res = []
for i in range(len(list1)):
    lis_res.append(list1[i]*list2[i])
---时间复杂度: for 循环--》o(n)
    

创建numpy数组:
---numpy数组即numpy的ndaray对象,创建numpy数组就是把一个列表传入np.array()方法

import numpy as np

#创建一维数组:
arr = np.array([1,2,3])# []为可变数据类型
print(arr,type(arr))

#创建二维数组
arr1 = np.array([[1,2,3],[4,5,6]])

#创建三维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

numpy数组的常用属性:

T     数组的转置(行位互换)--》高维
dtype 数组元素的数据类型
size  数组元素的个数
ndim  数组的维数
shape 数组的维度大小(以元组形式)
astype 类型转换

dtype 种类: bool_,int(8,16,32,64),
            float(16,32,64)
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)
print(arr)

[[1. 2. 3.]
 [4. 5. 6.]]
print(arr.T)

[[1. 4.]
 [2. 5.]
 [3. 6.]]
print(arr.shape)
(2, 3)  #二行,三列

numpy数组的行列数:

print(arr.shape[0])
-->行
print(arr.shape[1])
-->列

切割数组:

--numpy数组的切割涉及到行和列的切割,但是两者切割的方式都是从索引0开始,并且取头不取尾。

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

#取所有元素
print(arr[:,:])
#取第一行所有元素
print(arr[:1,:])
print(arr[0, [0, 1, 2, 3]])
#取第一列所有元素
print(arr[:,:1])


#---逻辑取值,返回一个数组,
print(arr[arr>5])
--[ 6  7  8  9 10 11 12]

numpy数组按运算符取元素的原理,即通过arr > 5生成一个布尔numpy数组
print(arr > 5)

numpy数组元素替换:

--numpy数组也是一个可变类型的数据,即如果对numpy数组进行替换操作,会修改原numpy数组的元素

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(arr)

arr1 = arr.copy()
arr1[:1,:] = 0
print(arrl)
[[ 0  0  0  0]
 [ 5  6  7  8]
 [ 9 10 11 12]]

arr2 = arr.copy()
arr[arr>5] = 0
print(arr2)

arr3[:,:] = 0
	

numpy数组的合并:

arr1 = np.array([[1, 2], [3, 4], [5, 6]])

arr2 = np.array([[7, 8], [9, 10], [11, 12]])
# 合并两个numpy数组的行,注意使用hstack()方法合并numpy数组,numpy数组应该有相同的行,其中hstack的h表示horizontal水平的
print(np.hstack(arr1,arr2))
[[ 1  2  7  8]
 [ 3  4  9 10]
 [ 5  6 11 12]]

# 合并两个numpy数组,其中axis=1表示合并两个numpy数组的行
print(np.concatenate((arr1, arr2), axis=1))

# 合并两个numpy数组的列,注意使用vstack()方法合并numpy数组,numpy数组应该有相同的列,其中vstack的v表示vertical垂直的
print(np.vstack((arr1, arr2)))
[[ 1  2]
 [ 3  4]
 [ 5  6]
 [ 7  8]
 [ 9 10]
 [11 12]]
# 合并两个numpy数组,其中axis=0表示合并两个numpy数组的列
print(np.concatenate((arr1, arr2), axis=0))


通过函数创建numpy数组:

array()    将列表转化为数组,可选择显示指定dtype
areange()   range的numpy版,支持浮点数
linspace()  类似arange(),第三参数为数组长度
zero()/ones() 根据指定形状和dtype创建全0 / 1数组  
eye()      创建单位矩阵
empty()    创建一个元素全随机数
reshape()  重塑形状
arr = np.array([1,2,3])
print(arr)

print(np.arange(10))
-[0 1 2 3 4 5 6 7 8 9]
print(np.arange(1,10,2))

--linspace / logspace
#构造一个等差数列,
print(np.linspace(0,20,5))
--[ 0.  5. 10. 15. 20.]
# 构造一个等比数列,从10**0取到10**20,取5个数
print(np.logspace(0,20,5))
--[1.e+00 1.e+05 1.e+10 1.e+15 1.e+20]

zeros / ones / eye / empty
print(n.zero(3,4))
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

print(np,eye(3))
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

 构造一个4*4的随机numpy数组,里面的元素是随机生成的
print(np.empty((4, 4)))
[[ 2.31584178e+077 -1.49457545e-154  3.95252517e-323  0.00000000e+000]
 [ 0.00000000e+000  0.00000000e+000  0.00000000e+000  0.00000000e+000]
 [ 0.00000000e+000  0.00000000e+000  0.00000000e+000  0.00000000e+000]
 [ 0.00000000e+000  0.00000000e+000  1.29074055e-231  1.11687366e-308]]

#reshape--重塑形状
arr = np.ones([2,2],dtype=int)
print(arr.reshape(4,1))
[[1]
 [1]
 [1]
 [1]]

numpy数组运算:

+	两个numpy数组对应元素相加
-	两个numpy数组对应元素相减
*	两个numpy数组对应元素相乘
/	两个numpy数组对应元素相除,如果都是整数则取商
%	两个numpy数组对应元素相除后取余数
**n	单个numpy数组每个元素都取n次方,如**2:每个元素都取平方
arr1 = np.array([[1, 2], [3, 4], [5, 6]])
arr2 = np.array([[7, 8], [9, 10], [11, 12]])

print(ar11+arr2)
print(arr1**2)
[[ 8 10]
 [12 14]
 [16 18]]

numpy数组的转置

---numpy数组的行和列互换

arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr.transpose) /print(arr.T)
[1 4]
 [2 5]
 [3 6]]

numpy数组的逆:

--numpy数组行和列相同时,numpy数组才可逆

arr = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]])

print(np.linalg.inv(arr))

Numpy数组科学和统计方法:

sum	求和
cumsum	累加求和
mean	求平均数
std	求标准差
var	求方差
min	求最小值
max	求最大值
argmin	求最小值索引
argmax	求最大值索引
sort	排序
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(arr.max())
# 获取举着每一行的最大值
print(arr.max(axis=0))
# 获取numpy数组最大元素的索引位置
print(arr.argmax(axis=1))
# 获取numpy数组每一列的平均值
print(arr.mean(axis=0))
# 获取numpy数组每一列的元素的方差
print(arr.var(axis=0))
# 对numpy数组的每一列求和
print(arr.sum(axis=0))
# 第n个元素为前n-1个元素累加和
print(arr.cumsum())

numpy.random生成随机数:

rand(d0,d1,⋯,dn)	产生均匀分布的随机数	dn为第n维数据的维度
randn(d0,d1,⋯,dn)	产生标准正态分布随机数	dn为第n维数据的维度
randint(low[, high, size, dtype])	产生随机整数	low:最小值;high:最大值;size:数据个数
random_sample([size])	在[0,1)内产生随机数	size为随机数的shape,可以为元祖或者列表
choice(a[, size])	从arr中随机选择指定数据	arr为1维数组;size为数组形状
uniform(low,high [,size])	给定形状产生随机数组	low为最小值;high为最大值,size为数组形状
shuffle(a)	与random.shuffle相同	a为指定数组
原文地址:https://www.cnblogs.com/shaozheng/p/11608269.html