数组的创建

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数组操作的更多相关文章

  1. python numpy数组操作2

    数组的四则运算 在numpy模块中,实现四则运算的计算既可以使用运算符号,也可以使用函数,具体如下例所示: #加法运算 import numpy as npmath = np.array([98,83 ...

  2. Numpy 数组操作

    Numpy 数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resh ...

  3. Numpy数组操作

    """ Numpy 数组操作 修改数组形状 函数 描述 reshape 不改变数据的条件下修改形状 flat 数组元素迭代器 flatten 返回一份数组拷贝,对拷贝所做 ...

  4. python numpy 数组拼接

    我就写一下我遇到的,更多具体的请看Python之Numpy数组拼接,组合,连接 >>> aarray([0, 1, 2],       [3, 4, 5],       [6, 7, ...

  5. Python Numpy线性代数操作

    Python Numpy线性代数函数操作 1.使用dot计算矩阵乘法 import numpy as np from numpy import ones from __builtin__ import ...

  6. Python+OpenCV图像处理(三)—— Numpy数组操作图片

    一.改变图片每个像素点每个通道的灰度值 (一) 代码如下: #遍历访问图片每个像素点,并修改相应的RGB import cv2 as cv def access_pixels(image): prin ...

  7. Python Numpy 数组的初始化和基本操作

    一.基础: Numpy的主要数据类型是ndarray,即多维数组.它有以下几个属性: ndarray.ndim:数组的维数 ndarray.shape:数组每一维的大小 ndarray.size:数组 ...

  8. 9、numpy——数组操作

    Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: (1)修改数组形状 (2)翻转数组 (3)修改数组维度 (4)连接数组 (5)分割数组 (6)数组元素的添加与删除 1.修改数组形状 函 ...

  9. 吴裕雄--天生自然Numpy库学习笔记:Numpy 数组操作

    import numpy as np a = np.arange(8) print ('原始数组:') print (a) print ('\n') b = a.reshape(4,2) print ...

随机推荐

  1. 一文带你学习DWS数据库用户权限设计与管理

    前言 本文将介绍DWS基于RBAC(Role-Based Access Control,基于角色的访问控制)的数据库用户权限管理.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成 ...

  2. jmeter单接口和多接口测试

    @@@@@@@@@@@@@@@ # 路漫漫其修远 最近接触到了多接口串联,接口串联的技术会在其他帖子有说明,其核心技术点就是通过正则表达式和变量来实现接口的关联.目前为止呢笔者用到的地方还只有一个,就 ...

  3. PHP get_resource_type() 函数

    get_resource_type() 返回资源(resource)类型. 版本要求:PHP 4 >= 4.0.2, PHP 5, PHP 7高佣联盟 www.cgewang.com 语法 st ...

  4. luogu P3920 [WC2014]紫荆花之恋

    LINK:紫荆花之恋 每次动态加入一个节点 统计 有多少个节点和当前节点的距离小于他们的权值和. 显然我们不能n^2暴力. 考虑一个简化版的问题 树已经给出 每次求某个节点和其他节点的贡献. 不难想到 ...

  5. Phantomjs实现后端生成图片文件

    目录 PhantomJS简介 了解rasterize.js 使用方法 今天,给大家分享一个Java后端利用Phantomjs实现生成图片的功能,同学们使用的时候,可以参考下! PhantomJS简介 ...

  6. 学习java 线程池-1: ThreadPoolExecutor

    1. Executor 该接口内只有一个接口方法 :该方法的目的就是执行指定的 Runnable (但会不会执行,或者会不会立马执行,则不一定.因为要取决于整个线程池的状态) Executor 中文的 ...

  7. AsyncTask被废弃了,换Coroutine吧

    本文主要是学习笔记,有版权问题还请告知删文 鸣谢:guolin@第一行代码(第三版) 你是否也在最近的代码中看见了 AsyncTask 被一条横杠划掉了 这表明--他要被Google放弃了 Googl ...

  8. 使用docker安装nginx并配置端口转发

    使用docker安装并运行nginx命令: docker run --name=nginx -p 80:80 -d docker.io/nginx 使用命令: docker exec -it ngin ...

  9. QWebEngineView简单使用

    QWebEngineView是提供一个访问web页面的widget,这里是一个简单的使用代码 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H #includ ...

  10. 22、Command 命令模式

    1.command 命令模式 命令模式(Command Pattern):在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指 ...