数据分析_numpy_基础1
数据分析_numpy_基础1
创建数组
| 方法 | 说明 |
|---|---|
| np.array( x ) | 将输入数据转化为一个ndarray| |
| np.array( x, dtype ) | 将输入数据转化为一个类型为type的ndarray| |
| np.asarray( array ) | 将输入数据转化为一个新的(copy) |
| np.ones( N ) | 生成一个N长度的一维全一ndarray |
| np.ones( N, dtype) | 生成一个N长度类型是dtype的一维全一ndarray |
| np.ones_like( ndarray ) | 生成一个形状与参数相同的全一ndarray |
| np.zeros( N) | 生成一个N长度的一维全零ndarray |
| np.zeros( N, dtype) | 生成一个N长度类型位dtype的一维全零ndarray |
| np.zeros_like(ndarray) | 类似np.ones_like( ndarray ) |
| np.empty( N ) | 生成一个N长度的未初始化一维ndarray |
| np.empty( N, dtype) | 生成一个N长度类型是dtype的未初始化一维ndarray |
| np.empty(ndarray) | 类似np.ones_like( ndarray ) |
| np.eye( N ) | 创建一个N * N的单位矩阵(对角线为1,其余为0) |
| np.identity( N ) | |
| np.arange( num) | 生成一个从0到num-1步数为1的一维ndarray |
| np.arange( begin, end) | 生成一个从begin到end-1步数为1的一维ndarray |
| np.arange( begin, end, step) | 生成一个从begin到end-step的步数为step的一维ndarray |
| np.mershgrid(ndarray, ndarray,...) | 生成一个ndarray * ndarray * ...的多维ndarray |
| np.where(cond, ndarray1, ndarray2) | 根据条件cond,选取ndarray1或者ndarray2,返回一个新的ndarray |
| np.in1d(ndarray, [x,y,...]) | 检查ndarray中的元素是否等于[x,y,...]中的一个,返回bool数组 |
array 创建数组
import numpy as np
np.array([[1,2],[3,4]])
arr = [1,2,3,4,5,6,7]
a = np.array(arr)
a
###############
array([1, 2, 3, 4, 5, 6, 7])
zeros 创建默认0的数组
a = np.zeros(3)
print ('a:',a)
b = np.zeros((3,3))
print('b:',b)
c = np.zeros_like(a)
print('c:',c)
###############
a: [0. 0. 0.]
b: [[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
c: [0. 0. 0.]
ones 创建默认1的数组
a = np.ones(3)
print ('a:',a)
b = np.ones((3,3))
print('b:',b)
c = np.ones_like(b)
print('c:',c)
###############
a: [1. 1. 1.]
b: [[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
c: [[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
empty 创建默认值 随机的数组
print (np.empty((2)))
print(np.empty((2,4)))
###############
[-5.73021895e-300 6.92466535e-310]
[[6.92449667e-310 5.02034658e+175 6.03195894e+174 2.73950109e-057]
[7.12194759e-067 2.10979251e-052 1.47763641e+248 1.16096346e-028]]
random.randn 随机值数组
np.random.randn(6)
###############
array([ 0.84344504, -0.73714262, 0.93808627, -1.00264675, -0.17058495,
0.4664123 ])
random.randn 随机值多维数组
np.random.randn(2,2)
###############
array([[ 0.38153354, -0.92519611],
[-1.3137341 , -1.26921917]])
arange 创建序列数组
## arange 0-9
print(np.arange(10))
## arange 5-15
print(np.arange(5,15))
## arange 13579
print(np.arange(1,10,2))
###############
[0 1 2 3 4 5 6 7 8 9]
[ 5 6 7 8 9 10 11 12 13 14]
[1 3 5 7 9]
## eye identity 创建对角线为一的多维数组
a = np.eye(4)
print(a)
np.identity(4)
###############
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
np.eye(3,3,3)
###############
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
reshape 一维转多维
a = np.arange(4).reshape(2,2)
print(a)
###############
[[0 1]
[2 3]]
meshgrid 生成一个ndarray * ndarray * ...的多维ndarray
x = np.array([0, 1, 2])
y = np.array([0, 1])
X, Y = np.meshgrid(x, y)
print(X)
print(Y)
###############
[[0 1 2]
[0 1 2]]
[[0 0 0]
[1 1 1]]
常用方法
ndim 查看数据维度
shape 查看数据维度大小
dtype 查看数据类型
a = np.random.randn(3,3,3)
# 查看数据维度
print(a.ndim)
# 查看数据维度大小
print(a.shape)
# dtype 查看数据类型
print(a.dtype)
3
(3, 3, 3)
float64
astype转换数据类型
a = np.eye(5,5)
print(a.dtype)
b = a.astype(np.int64).dtype
print(b)
###############
float64
int64
数学运算 加减乘除
# +
a = np.arange(4).reshape(2,2)
print(a)
print('++++++++')
print(a+1)
# -
print('--------')
print(a-1)
# *
print('********')
print(a*2)
# /
print('////////')
print(1/(a+1))
###############
[[0 1]
[2 3]]
++++++++
[[1 2]
[3 4]]
--------
[[-1 0]
[ 1 2]]
********
[[0 2]
[4 6]]
////////
[[1. 0.5 ]
[0.33333333 0.25 ]]
比较运算
a = np.arange(6,0,-1).reshape(2,3)
b = np.arange(3,9).reshape(2,3)
print(a,b,a>b,sep='\n')
###############
[[6 5 4]
[3 2 1]]
[[3 4 5]
[6 7 8]]
[[ True True False]
[False False False]]
切片和索引
一维切片同py list
a = np.arange(10)
print(a)
print(a[5])
print(a[5:8])
a[5:8] = 12
print(a)
###############
[0 1 2 3 4 5 6 7 8 9]
5
[5 6 7]
[ 0 1 2 3 4 12 12 12 8 9]
切片后不等copy
b = a[5:8]
print(b)
b[1] = 21
print(a)
###############
[12 12 12]
[ 0 1 2 3 4 12 21 12 8 9]
# 切片给数组赋值
a[:] = 0
a
###############
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
copy 复制
# 复制
b = a[2:5].copy()
print(b)
b[:] = 11
print(b)
print(a)
###############
[0 0 0]
[11 11 11]
[0 0 0 0 0 0 0 0 0 0]
多维数组
# 多维数组
a2d = np.arange(6).reshape(2,3)
print(a2d)
# 两种取值方式,结果一样
print(a2d[0][2])
print(a2d[0,2])
###############
[[0 1 2]
[3 4 5]]
2
2
# 多维数组
a3d = np.arange(1,13).reshape(2,2,3)
print(a3d)
print(a3d.ndim)
print(a3d[0])
print(a3d[0].ndim)
###############
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
3
[[1 2 3]
[4 5 6]]
2
标量值和数组都可以赋值
# 标量值和数组都可以赋值给 a3d
tmp = a3d[0].copy()
a3d[0] = 99
print(a3d)
a3d[0] = tmp
print(a3d)
###############
[[[99 99 99]
[99 99 99]]
[[ 7 8 9]
[10 11 12]]]
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
多维数组 切片索引
选行
a = np.eye(4)
# 选2 3 行
a[[2,3]]
###############
array([[0., 0., 1., 0.],
[0., 0., 0., 1.]])
选列
a[:][2]
###############
array([0., 0., 1., 0.])
a2d = np.arange(9).reshape(3,3)
print(a2d)
# 选择前2
print(a2d[:2])
# 选择 0 1 的0
print(a2d[:2,:1])
# 选择0 1 的 1 2
print(a2d[:2,1:])
# 选择 1 的 1 2
print(a2d[1,1:])
###############
[[0 1 2]
[3 4 5]
[6 7 8]]
[[0 1 2]
[3 4 5]]
[[0]
[3]]
[[1 2]
[4 5]]
[4 5]
a2d[:2,1:] = 0
a2d
###############
array([[0, 0, 0],
[3, 0, 0],
[6, 7, 8]])
布尔型,索引
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = np.random.randn(7,4)
print(names,data,sep='/n')
print(names == 'Bob')
###############
['Bob' 'Joe' 'Will' 'Bob' 'Will' 'Joe' 'Joe']/n[[-0.75689604 0.88583323 -1.49689044 0.95657837]
[-1.41937221 -0.22434237 1.74661417 0.08943732]
[ 1.55542971 -1.73335114 0.22718931 0.07517303]
[ 2.97463647 1.26849374 -0.38591486 0.1239141 ]
[-1.0057703 -0.26292255 1.42444036 -2.02698881]
[-0.00814679 0.38637696 -0.49233058 -1.13374044]
[-1.03599764 -1.3238696 -0.70148144 0.59657573]]
[ True False False True False False False]
print(data[names == 'Bob'])
print(data[names == 'Bob',2:])
print(data[names == 'Bob',3])
###############
[[-0.75689604 0.88583323 -1.49689044 0.95657837]
[ 2.97463647 1.26849374 -0.38591486 0.1239141 ]]
[[-1.49689044 0.95657837]
[-0.38591486 0.1239141 ]]
[0.95657837 0.1239141 ]
print(names != 'Bob')
print(data[~(names == 'Bob')])
print(((names == 'Bob') | (names == 'Will')))
###############
[False True True False True True True]
[[-1.41937221 -0.22434237 1.74661417 0.08943732]
[ 1.55542971 -1.73335114 0.22718931 0.07517303]
[-1.0057703 -0.26292255 1.42444036 -2.02698881]
[-0.00814679 0.38637696 -0.49233058 -1.13374044]
[-1.03599764 -1.3238696 -0.70148144 0.59657573]]
[ True False True True True False False]
data[data<0] = 0
data
###############
array([[0. , 0.88583323, 0. , 0.95657837],
[0. , 0. , 1.74661417, 0.08943732],
[1.55542971, 0. , 0.22718931, 0.07517303],
[2.97463647, 1.26849374, 0. , 0.1239141 ],
[0. , 0. , 1.42444036, 0. ],
[0. , 0.38637696, 0. , 0. ],
[0. , 0. , 0. , 0.59657573]])
data[names != 'Joe'] = 7
data
###############
array([[7. , 7. , 7. , 7. ],
[0. , 0. , 1.74661417, 0.08943732],
[7. , 7. , 7. , 7. ],
[7. , 7. , 7. , 7. ],
[7. , 7. , 7. , 7. ],
[0. , 0.38637696, 0. , 0. ],
[0. , 0. , 0. , 0.59657573]])
a = np.empty((8,4))
for i in range(8):
a[i] = i
a
###############
array([[0., 0., 0., 0.],
[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.],
[4., 4., 4., 4.],
[5., 5., 5., 5.],
[6., 6., 6., 6.],
[7., 7., 7., 7.]])
# 以特定顺序选取子集
print(a[[5,2,1]])
# 以顺序选取列
a[:,2]
###############
[[5. 5. 5. 5.]
[2. 2. 2. 2.]
[1. 1. 1. 1.]]
array([0., 1., 2., 3., 4., 5., 6., 7.])
# 负索引
print(a[[-3,-6,-7]])
print(a[[-3,-6,-7],[0,1,2]])
print(a[[-3,-6,-7]][:, [0,1]])
###############
[[5. 5. 5. 5.]
[2. 2. 2. 2.]
[1. 1. 1. 1.]]
[5. 2. 1.]
[[5. 5.]
[2. 2.]
[1. 1.]]
数组转置和轴对换
a = np.arange(8).reshape((2,4))
print(a)
print(a.T)
###############
[[0 1 2 3]
[4 5 6 7]]
[[0 4]
[1 5]
[2 6]
[3 7]]
dot计算内积
一维: x0*x1 + y0*y1
二维: arr2[0][0] = arr0[0][0] * arr1[0][0] + arr0[0][1] * arr1[1][0] (0*0 + 1*1)
arr2[0][1] = arr0[0][0] * arr1[0][1] + arr0[0][1] * arr1[1][1] (0*2 + 1*3)
arr2[1][0] = arr0[1][0] * arr1[0][0] + arr0[1][1] * arr1[1][0] (2*0 + 3*1)
arr2[1][1] = arr0[1][0] * arr1[0][1] + arr0[1][1] * arr1[1][1] (2*2 + 3*3)
a = np.arange(4).reshape((2,2))
print(a)
print(a.T)
print(np.dot(a[0],a[1]))
print(np.dot(a, a.T))
###############
[[0 1]
[2 3]]
[[0 2]
[1 3]]
3
[[ 1 3]
[ 3 13]]
transpose 交换坐标轴
维度 2 2 2 对应 012 相当交换维度
arr = np.arange(12).reshape((2, 2, 3))
print(arr)
arr.transpose((2,1,0))
###############
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
array([[[ 0, 6],
[ 3, 9]],
[[ 1, 7],
[ 4, 10]],
[[ 2, 8],
[ 5, 11]]])
arr = np.arange(9).reshape(3,3)
print(arr)
arr.transpose((1,0))
###############
[[0 1 2]
[3 4 5]
[6 7 8]]
array([[0, 3, 6],
[1, 4, 7],
[2, 5, 8]])
数据分析_numpy_基础1的更多相关文章
- 数据分析_numpy_基础2
数据分析_numpy_基础2 sqrt 开方 arr = np.arange(10) arr # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) np.sqrt(arr) ...
- 利用Python进行数据分析_Numpy_基础_3
通用函数:快速的元素级数组函数 通用函数,是指对数组中的数据执行元素级运算的函数:接受一个或多个标量值,并产生一个或多个标量值. sqrt 求平方根 np.sqrt(arr) exp 计算各元素指数 ...
- 利用Python进行数据分析_Numpy_基础_2
Numpy数据类型包括: int8.uint8.int16.uint16.int32.uint32.int64.uint64.float16.float32.float64.float128.co ...
- 利用Python进行数据分析_Numpy_基础_1
ndarray:多维数组 ndarray 每个数组元素必须是相同类型,每个数组都有shape和dtype对象. shape 表示数组大小 dtype 表示数组数据类型 array 如何创建一个数组? ...
- 利用Python进行数据分析——Numpy基础:数组和矢量计算
利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...
- 数据分析——python基础
前言:python数据分析的基础知识,简单总结,主要是为了方便自己写的时候查看(你们可能看不太清楚T^T),发现有用的方法,随时补充,欢迎指正 数据分析专栏: 数据分析--python基础 数据分析- ...
- Python数据分析——numpy基础简介
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:基因学苑 NumPy(Numerical Python的简称)是高性 ...
- Python数据分析(基础)
目录: Python基础: Python基本用法:控制语句.函数.文件读写等 Python基本数据结构:字典.集合等 Numpy:简述 Pandas:简述 一. Python基础: 1.1 文件读取 ...
- python数据分析 Numpy基础 数组和矢量计算
NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...
随机推荐
- tomcat服务器的应用总结
tomcat的安装和部署: >> Web的基本入门: |-- C/S架构:客户端和服务器: |-- B/S架构:浏览器和服务器: >> 服务器当中可以放入的资源: |-- 静态 ...
- 线程(Thread)的四种停止方式
1.正常的程序启动,停止 2.使用退出标记,一般程序在run()方法后,线程会正常结束.但是有一些伺服线程还在运行,他们运行时间较长,只有当外部条件满足时,他们才会停止.实现如下: public cl ...
- 浅析SIEM、态势感知平台、安全运营中心
近年来SIEM.态势感知平台.安全运营中心等概念炒的火热,有的人认为这都是安全管理产品,这些产品就是一回事,有人认为还是有所区分.那么到底什么是SIEM.什么是态势感知平台.什么是安全运营中心,他们之 ...
- 前端解决跨域问题的终极武器——Nginx反向代理
提到代理,分为:正向代理和反向代理. 正向代理:就是你访问不了Google,但是国外有个VPN可以访问Google,你访问VPN后叫它访问Google,然后把数据传给你. 正向代理隐藏了真实的客户端. ...
- 五分钟学Java:如何才能学好Java Web里这么多的技术
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...
- pyppeteer基本使用demo
# -*- coding: utf-8 -*- # 类似selenium,支持异步,不需要再单独安装环境,pyppeteer自动安装环境 # 异步await要写到一个函数的内部 from pyppet ...
- WPF学习概述
引言 在桌面开发领域,虽然在某些领域,基于electron的跨平台方案能够为我们带来某些便利,但是由于WPF技术能够更好的运用Direct3D带来的性能提升.以及海量Windows操作系统和硬件资源的 ...
- PLINQ 并行操作Linq
C#并行编程-PLINQ:声明式数据并行 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C#并行编程-线程同步原语 C#并行编程-P ...
- qt creator源码全方面分析(3-5)
目录 qtcreatorlibrary.pri 使用实例 上半部 下半部 结果 qtcreatorlibrary.pri 上一章节,我们介绍了src.pro,这里乘此机会,把src目录下的所有项目文件 ...
- 入门Python实现七夕表白神器
from PIL import Image, ImageDraw, ImageFont font_size = 7 #This var can change the Word's blank size ...