python numpy数组操作
数组的创建
import numpy as np
arr1 = np.array([3,10,8,7,34,11,28,72])
arr2 = np.array(((8.5,6,4.1,2,0.7),(1.5,3,5.4,7.3,9),
(3.2,3,3.8,3,3),(11.2,13.4,15.6,17.8,19)))
print('一维数组: \n',arr1)
print('二维数组: \n',arr2)
如上述所示,可以将列表和元组转换为一个数组,在第二个数组中,输入的元素含有整数型和浮点型两种数据类型,但输出的数组
元素全部是浮点型(原来的整型被强制转换为浮点型了,保证数组元素的一致性)
数组元素的获取
import numpy as np
arr1 = np.array([3,10,8,7,34,11,28,72])
arr2 = np.array(((8.5,6,4.1,2,0.7),(1.5,3,5.4,7.3,9),
(3.2,3,3.8,3,3),(11.2,13.4,15.6,17.8,19)))
print('一维数组: \n',arr1)
print('二维数组: \n',arr2)
print(arr1[[2,3,5,7]]) #数组1的3 4 6 8个元素
print(arr2[1,2]) #二维数组的第2行第3列的元素 输出的是具体的数值
print(arr2[2,:]) #二维数组的第3行所有数据
print(arr2[:,1]) #二维数组的第2列所有数组
print(arr2[1:4,1:5]) #二维数组的第2-4行,2-5列的数据 这个地方要注意的,不是分别显示2行5列和2行6列的数据
print(arr2[[0,1],[2,3]]) #对比一下上面的表达,这个表达要比较注意,表示的是 0 2 第1行第3列的数据,和 1 3第2行第4列的数据输 #出的是 [4.1,7.3] 组成的一维数组
print(arr2[np.ix_([0,-1],[1,3])]) #第1行第2列,第1行第4列 ;最后一行第2列,最后一行第4列 组成的二维数组
print(arr2[np.ix_([0,-1],[1,2,3])]) #第1行第2列,第1行第3列,第1行第4列;最后一行第2列,最后一行第3列,最后一行第4列 组成的二维 #数组
out:
[[ 6. 4.1 2. ]
[13.4 15.6 17.8]]
数组的常用属性
如果不是手工写入的数组,而是从外部读入的数据,此时也许对数据就是一无所知,如该数据的维数,行列数,数据类型等信息,下面通过简短的代码来了解数组的几个常用属性,进而跨出了解数据的第一步。
在numpy模块中,可以通过genfromtxt函数读取外部文文件的数据,这里的文本文件主要为csv文件和txt文件。关于该函数的语法和重要参数含义如下:
np.genfrom xt(fname,dtype=<class 'float' >,
comments = '#',delimiter = None,skip_header = 0,
skip_footer=0,converters=None,missing
_values=None,filling_values=None,usecols=None,
names=None.)
fname:指定需要读入数据的文件路径。
dtype:指定读入数据的数据类型,默认为浮点型,如果原数据集中含有字符型数据,必须指定数据类型为“str”
comments:指定注释符,默认为“#”,如果原数据的行首有“#”,将忽略这些行的读入。
delimiter:指定数据集的列分割符
skip_footer:是否跳过数据集的脚注,默认不跳过
converters:将指定列的数据转换成其他数值。
miss_values:指定缺失值的标记,如果原数据集含指定的标记,读入后这样的数据就为缺失值。
filling_values:指定缺失值的填充值。
usecols:指定需要读入哪些列。
names:为读入数据的列设置列名称。
例:
import numpy as np
stu_score = np.genfromtxt(fname = r'D:\BaiduNetdiskDownload\从零开始学Python--数据分析与挖掘\第4章 Python数值计算工具--Numpy\stu_score.txt',
delimiter='\t',skip_header=1)
print(type(stu_score)) #查看数据结构
print(stu_score.ndim) #查看数据维数
print(stu_score.shape) #查看数据行列数
print(stu_score.dtype) #查看数组元的数据类型
print(stu_score.size) #查看数组元素的个数
out:
<class 'numpy.ndarray'>
2
(1380, 5)
float64
6900
数组的形状处理
数组形状处理的手段主要有reshape,resize,ravel,flatten,vstack,hstack,row_stack和colum_stack,下面通过简单的案例
来解释这些‘方法’或函数的区别。
arr3 = np.array([[1,5,7],[3,6,1],[2,4,8],[5,8,9],[1,5,9],[8,5,2]])
print(arr3.shape) #操作前数组的行列数
print(arr3.reshape(2,9)) #使用reshpe方法更改数组的形状
print(arr3.shape) #确认一下原数组的形状有没有被改变
print(arr3.resize(2,9)) #使用resize方法改变数组的形状
print(arr3.shape)
out:
(6, 3)
[[1 5 7 3 6 1 2 4 8]
[5 8 9 1 5 9 8 5 2]]
(6, 3)
None
(2, 9)
因此得出:reshape方法不改变原有数组的形状,resize方法改变了原有数组的形状;实际上reshape方法只是返回改变形状后的预览,而resize方法不返回预览,会直接改变数组的形状。
如果需要将多维数组降为一维数组,利用ravel,flatten和reshape三种方法均可以轻松解决。
例:
import numpy as np
arr4 = np.array([[1,10,100],[2,20,200],[3,30,300]])
print('原数组:\n',arr4)
#默认排序降维
print('数组维度:\n',arr4.ravel())
print(arr4.flatten())
print(arr4.reshape(-1))
#改变排序模式的降维
print(arr4.ravel(order = 'F'))
print(arr4.flatten(order = 'F'))
print(arr4.reshape(-1,order = 'F'))
out:
原数组:
[[ 1 10 100]
[ 2 20 200]
[ 3 30 300]]
数组维度:
[ 1 10 100 2 20 200 3 30 300]
[ 1 10 100 2 20 200 3 30 300]
[ 1 10 100 2 20 200 3 30 300]
[ 1 2 3 10 20 30 100 200 300]
[ 1 2 3 10 20 30 100 200 300]
[ 1 2 3 10 20 30 100 200 300]
import numpy as np
arr4.flatten()[0] = 2000
print('flatten方法:\n',arr4)
arr4.ravel()[1] = 1000
print('ravel方法:\n',arr4)
arr4.reshape(-1)[2] = 3000
print('reshape 方法:\n',arr4)
out:
flatten方法:
[[ 1 10 100]
[ 2 20 200]
[ 3 30 300]]
ravel方法:
[[ 1 1000 100]
[ 2 20 200]
[ 3 30 300]]
reshape 方法:
[[ 1 1000 3000]
[ 2 20 200]
[ 3 30 300]]
如上结果所示,通过flatten方法实现的降维返回的是复制,因为对降维后的元素做修改,并没有影响到原数组arr4的结果;相反,ravel方法与reshape方法返回的则是视图,通过对视图的改变,是会影响到原数组arr4的.
vastack用于垂直方向(纵向)的数组堆叠,其功能与row_stack函数一致,而hstack则用于水平方向(横向)的数组合并,其功能与colum_stack函数一致,下面通过例子说明差异:
import numpy as np
arr5 = np.array([1,2,3])
print('vstack纵向堆叠数组:\n',np.vstack([arr4,arr5]))
print('row_stack纵向堆叠数组:\n',np.row_stack([arr4,arr5]))
arr6 = np.array([[5],[15],[25]])
print('hstack横向合并数组:\n',np.hstack([arr4,arr6]))
print('column_stack横向合并数组:\n',np.column_stack([arr4,arr6]))
out:
vstack纵向堆叠数组:
[[ 1 1000 3000]
[ 2 20 200]
[ 3 30 300]
[ 1 2 3]]
row_stack纵向堆叠数组:
[[ 1 1000 3000]
[ 2 20 200]
[ 3 30 300]
[ 1 2 3]]
hstack横向合并数组:
[[ 1 1000 3000 5]
[ 2 20 200 15]
[ 3 30 300 25]]
column_stack横向合并数组:
[[ 1 1000 3000 5]
[ 2 20 200 15]
[ 3 30 300 25]]
如上结果所示,前两个输出是纵向堆叠的效果,后两个则是横向合并的效果.如果是多个数组的纵向堆叠,必须保证每个数组的列数相同.如果将多个数组按横向合并的话,则必须保证每个数组的行数相同.
python numpy数组操作的更多相关文章
- python numpy数组操作2
数组的四则运算 在numpy模块中,实现四则运算的计算既可以使用运算符号,也可以使用函数,具体如下例所示: #加法运算 import numpy as npmath = np.array([98,83 ...
- Numpy 数组操作
Numpy 数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resh ...
- Numpy数组操作
""" Numpy 数组操作 修改数组形状 函数 描述 reshape 不改变数据的条件下修改形状 flat 数组元素迭代器 flatten 返回一份数组拷贝,对拷贝所做 ...
- python numpy 数组拼接
我就写一下我遇到的,更多具体的请看Python之Numpy数组拼接,组合,连接 >>> aarray([0, 1, 2], [3, 4, 5], [6, 7, ...
- Python Numpy线性代数操作
Python Numpy线性代数函数操作 1.使用dot计算矩阵乘法 import numpy as np from numpy import ones from __builtin__ import ...
- Python+OpenCV图像处理(三)—— Numpy数组操作图片
一.改变图片每个像素点每个通道的灰度值 (一) 代码如下: #遍历访问图片每个像素点,并修改相应的RGB import cv2 as cv def access_pixels(image): prin ...
- Python Numpy 数组的初始化和基本操作
一.基础: Numpy的主要数据类型是ndarray,即多维数组.它有以下几个属性: ndarray.ndim:数组的维数 ndarray.shape:数组每一维的大小 ndarray.size:数组 ...
- 9、numpy——数组操作
Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: (1)修改数组形状 (2)翻转数组 (3)修改数组维度 (4)连接数组 (5)分割数组 (6)数组元素的添加与删除 1.修改数组形状 函 ...
- 吴裕雄--天生自然Numpy库学习笔记:Numpy 数组操作
import numpy as np a = np.arange(8) print ('原始数组:') print (a) print ('\n') b = a.reshape(4,2) print ...
随机推荐
- 浅谈二分图的最大匹配和二分图的KM算法
二分图还可以,但是我不太精通.我感觉这是一个很烦的问题但是学网络流不得不学它.硬啃吧. 人比较蠢,所以思考几天才有如下理解.希望能说服我或者说服你. 二分图的判定不再赘述一个图是可被划分成一个二分图当 ...
- CF R 632 div2 1333F Kate and imperfection
赛后看了半天题 才把题目看懂 英语水平极差. 意思:定义一个集合S的权值为max{gcd(a,b)};且\(a\neq b\) 这个集合可以从1~n中选出一些数字 求出当集合大小为k时的最小价值. 无 ...
- zabbix 邮件报警和微信报警
# 邮件报警 一.定义邮件发件人 #密码来源 完成操作会看到 二.定义邮件收件人 三.启动动作 #先开启 2.触发操作 3.恢复操作 4.开启发送消息 1.2. 微信报警 一. 首先要注册一个企业微信 ...
- c++ explict
explicit 用于一个参数的构造函数:防止隐式转换. 什么意思呢? myClass(int x); 这是个构造函数 我们可以使用 myClass a(4); 或 myClass a=4;来调用它 ...
- asp.net 远程模型验证
有这样一些场景,我们需要模型验证,某些字段不允许重复,但是又不希望在数据访问层增加一堆额外逻辑判断.我们需要数据访问层简洁,这种模型验证在进去Action之前,验证不通过直接告诉前端. 一个特性,继承 ...
- Tarjan 做题总结
这两天Tarjan复习完后把题做了做.洛谷题单<图的连通性>已经做得差不多了.大部分是Tarjan的题,所以写一篇小总结. T1 [模板] 缩点 不多bb.我已经写过关于Tarjan模板的 ...
- 实验06——java自动封箱、自动拆箱
package cn.tedu.demo; /** * @author 赵瑞鑫 E-mail:1922250303@qq.com * @version 1.0 * @创建时间:2020年7月17日 上 ...
- Kaggle-pandas(1)
Creating-reading-and-writing 戳我进原网站 教程 1.创建与导入 DataFrame import pandas as pd pd.DataFrame({'Yes': [5 ...
- 为何选择spark!
随着大数据处理的应用场景越来越多,人们对Hadoop的要求也越来越高,开发出的对应的系统也越来越多,人们迫切的需要一个综合的计算框架,Spark应运而生,我们可以看看Spark可以干些什么. 那么为什 ...
- sql server 存储过程的(包含事务)方法里面,采用游标循环,批量删除(修改)数据
sqlserver 数据库 1.下面是完整的 在存储过程中 使用游标进行 循环删除的实例(包括存储过程中,事务的应用) 2.有问题的话,欢迎随时讨饶我,相信大家看下注释应该就能明白了,很简单的一个,小 ...