数据分析_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的更多相关文章

  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) ...

  2. 利用Python进行数据分析_Numpy_基础_3

    通用函数:快速的元素级数组函数 通用函数,是指对数组中的数据执行元素级运算的函数:接受一个或多个标量值,并产生一个或多个标量值. sqrt 求平方根 np.sqrt(arr) exp 计算各元素指数 ...

  3. 利用Python进行数据分析_Numpy_基础_2

      Numpy数据类型包括: int8.uint8.int16.uint16.int32.uint32.int64.uint64.float16.float32.float64.float128.co ...

  4. 利用Python进行数据分析_Numpy_基础_1

    ndarray:多维数组 ndarray 每个数组元素必须是相同类型,每个数组都有shape和dtype对象. shape 表示数组大小 dtype 表示数组数据类型 array 如何创建一个数组? ...

  5. 利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

  6. 数据分析——python基础

    前言:python数据分析的基础知识,简单总结,主要是为了方便自己写的时候查看(你们可能看不太清楚T^T),发现有用的方法,随时补充,欢迎指正 数据分析专栏: 数据分析--python基础 数据分析- ...

  7. Python数据分析——numpy基础简介

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:基因学苑 NumPy(Numerical Python的简称)是高性 ...

  8. Python数据分析(基础)

    目录: Python基础: Python基本用法:控制语句.函数.文件读写等 Python基本数据结构:字典.集合等 Numpy:简述 Pandas:简述 一. Python基础: 1.1 文件读取 ...

  9. python数据分析 Numpy基础 数组和矢量计算

    NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...

随机推荐

  1. Java设计模式二

    今天谈的是工厂模式,该模式用于封装和对对象的创建,万物皆对象,那么万物又是产品类,如一个水果厂生产三种水果罐头,我们就可以将这三种水果作为产品类,再定义一个接口用来设定对水果罐头的生成方法,在工厂类中 ...

  2. windows下tensorflow/objectdetection API环境搭建(基于tensorflow1.14和python3.6)

    此前就听闻室友说tensorflow在windows下坑很多,这次终于亲身领会到了.以下是参考网上大佬的教程以及自己的踩坑史总结出的有效步骤(亲测有效) 1.下载objectdetection所在的m ...

  3. 002-DOM事件实例-实现一个可以拖拽的登陆窗口

    前言:这是跟着慕课网一个老师的视频做的,这几天在重新的梳理自己,写完这个例子要系统的学一下jQuery,我司现在用的还是比较多,毕竟用了它不用考虑IE兼容性,可以让开发更有效率. 1.项目需求及基本的 ...

  4. Fortify Audit Workbench 笔记 Access Control: Database

    Abstract 如果没有适当的 access control,就会执行一个包含用户控制主键的 SQL 指令,从而允许攻击者访问未经授权的记录. Explanation Database access ...

  5. Go语言:如何解决读取不到相对路径配置文件问题

    背景 项目交叉编译为可执行文件之后,在其他目录执行文件时提示找不到配置文件 2020/03/14 20:44:23 配置文件读取失败 open config.ini: no such file or ...

  6. Oracle根据实体类比对2个数据库结构差异(demo)

    源起 在公司做项目时 经常出现 实体结构和线上的数据结构以及公司开发库数据结构不匹配的问题 但是又不能直接把开发库导入到生产库因为生产库已经有实际数据了 所以弄了一个小工具 此处只做记录用 demo级 ...

  7. 关于.NET中的控制反转及AutoFac的简单说明

    目录 1.控制反转 1.1 什么是依赖? 1.2 什么是控制反转? 1.3 什么是依赖注入? 1.4 简单总结 2.控制反转容器 2.1 IOC容器说明 2.2 使用AutoFac的简介示例 3 使用 ...

  8. springboot项目中接口入参的简单校验

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  9. 03.文件I/O

    UNIX系统中的大多数文件I/O只需用到5个函数:open.read.write.lseek和close. 本章所说明的函数称为不带缓冲的I/O.不带缓冲指的是每个read和write都调用内核中的一 ...

  10. (转).balignl 16,0xdeadbeef浅析

    原文地址:http://zqwt.012.blog.163.com/blog/static/12044684201031102956976/ 最近在分析u-boot的源代码,看到这一行: .balig ...