numpy 学习 第2篇:ndarray 基础操作

numpy模块内置的函数能够对数组进行复杂而高效的操作,这些函数中都有一个参数axis(轴)。在数组中,轴表示维度,对于二维数组,axis参数的取值通常有:

  • 当axis为None,表示把数组展开为一维数组;
  • 当axis为0时,表示按照列(第一维)进行计算;
  • 当axis=1时,表示按照行(第二维)进行计算。

一,排序sort

sort(axis,kind)函数用于对数组进行排序,可以使用类方法numpy.sort(),返回的是数组的已排序的副本,而原始数组并没有改变;也可以使用对象方法obj.sort(),原始数组排序。

numpy.sort(a, axis=1, kind=‘quicksort‘)

参数注释:

  • a:所需排序的数组
  • axis:数组排序时的轴,axis=0排序;axis=1按行排序,默认值是1
  • kind:数组排序时使用的方法,其中:kind= ′quicksort ′为快排;kind=′mergesort′ 为归并排序;kind=′heapsort′为堆排
  • axis指定排序的轴;kind指定排序算法,默认的排序算法是快速排序,np.sort()返回的是数组的已排序的副本,而就是排序则会修改数组本身。

举个例子,对数组进行排序:

import numpy as np

a = np.array([[1, 2, 1]
             ,[1,1,0]])

r1=np.sort(a)
r2=np.sort(a,axis=0)
r3=np.sort(a,axis=1)

print(‘a.sort() = {0}\na.sort(axis=0) = {1}\na.sort(axis=1) ={2}‘.format(r1,r2,r3))

二,argsort()函数

argsort()函数返回的是按照数组值从小到大的索引值,即返回的是索引值,索引值是按照元素值从小到大得到的。

x=np.array([1,4,3,-1,6,9])
y=np.argsort(x)
#output
array([3, 0, 2, 1, 4, 5], dtype=int64)

元素-1的值是最小的,其索引是3,因此,argsort()的返回列表中是第一个item。

argsort()函数是将x中的元素从小到大排列提取其对应的index(索引),然后输出到y,按照降序排序:

y=np.argsort(-x)

按照升序排序:

y=np.argsort(x)

三,vectorize 向量化

numpy.vectorize()函数定义一个向量化函数,它以序列或numpy数组作为输入,对numpy数组做向量化操作。函数输出的数据类型是由otypes参数确定的,如果otypes=None,那么输出的数据类型是通过使用输入的第一个元素调用函数来确定的,该函数返回一个函数对象。

numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)

参数注释:

  • pyfunc:函数对象
  • otype:输出数据的类型(putput data type)

使用vectorize()定义一个向量化函数,对数组做向量化操作:

def myfunc(a, b):
    return a-b if a>b else a+b

vfunc = np.vectorize(myfunc)
vfunc([1, 2, 3, 4], 2)
#output array([3, 4, 1, 2])

四,reshap

reshap(array,newshape) :返回一个给定shape的数组的副本,例如,下面的代码把一个一维数组转换为4行2列的二位数组:

a=np.arange(8)
np.reshape(a,(4,2))

五,flatten

返回展平数组,原数组不改变

a=np.arange(8)
b=np.reshape(a,(4,2))
b.flatten()

六,计算元素的和/积

numpy计算元素的和/积,在语法上相似。

1,求和

numpy对象的函数:sum(axis)

参数axis是轴,对于二维数组,axis的取值有None、0和1:

  • 当参数为None时,把二维数组中的所有元素相加;
  • 当参数为0时,把二维数组中,按照列对元素相加;
  • 当参数为1时,把二维数组中,按照行对元素相加;

举个例子,创建一个二维数组,按照行和列分别求和:

import numpy as np

a = np.array([[0, 2, 1]
              ,[0,1,0]])

r1=a.sum()
r2=a.sum(axis=0)
r3=a.sum(axis=1)

print(‘a.sum() = {0}\na.sum(axis=0) = {1}\na.sum(axis=1) ={2}‘.format(r1,r2,r3))

2,求积

计算元素的积:prod(axis)

参数axis是轴,对于二维数组,axis的取值有None、0和1:

  • 当参数为None时,把二维数组中的所有元素相乘;
  • 当参数为0时,把二维数组中,按照列对元素相乘;
  • 当参数为1时,把二维数组中,按照行对元素相乘;

举个例子,创建一个二维数组,按照行和列分别求乘积:

import numpy as np

a = np.array([[1, 2, 1]
             ,[1,1,0]])

r1=a.prod()
r2=a.prod(axis=0)
r3=a.prod(axis=1)

print(‘a.prod() = {0}\na.prod(axis=0) = {1}\na.prod(axis=1) ={2}‘.format(r1,r2,r3))

七,计算统计量

对numpy对象计算,常用的统计量是:

  • mean(axis):计算元素的均值
  • var(axis):计算元素的方差
  • std(axis) :计算元素标准差
  • max(axis):计算元素的最大值
  • min(axis):计算元素的最小值
  • ptp(axis):计算元素的取值范围,即最大值和最小值的差值
  • median(axis):计算元素的中位数

举个例子,计算数组的均值:

import numpy as np

a = np.array([[1, 2, 1]
             ,[1,1,0]])

r1=a.mean()
r2=a.mean(axis=0)
r3=a.mean(axis=1)

print(‘a.mean() = {0}\na.mean(axis=0) = {1}\na.mean(axis=1) ={2}‘.format(r1,r2,r3))

八,最大值或最小值的索引

计算数组中最大值和最小值的索引:

  • argmax(axis):返回最大值的索引
  • argmin(axis):返回最小值的索引

举个例子,返回数组中最小值的索引:

import numpy as np

a = np.array([[1, 2, 1]
             ,[1,1,0]])

r1=a.argmin()
r2=a.argmin(axis=0)
r3=a.argmin(axis=1)

print(‘a.argmin() = {0}\na.argmin(axis=0) = {1}\na.argmin(axis=1) ={2}‘.format(r1,r2,r3))

九,等差数列

使用 numpy.linspace() 创建等差数列函数

numpy.linspace(start, stop[, num=50[, endpoint=True[, retstep=False[, dtype=None]]]]])

返回在指定范围内的均匀间隔的数字(组成的数组):

  • start - 起始点,
  • stop - 结束点
  • num - 元素个数,默认为50,
  • endpoint - 是否包含stop数值,默认为True,包含stop值;若为False,则不包含stop值
  • retstep - 返回值形式,默认为False,返回等差数列组,若为True,则返回结果(array([`samples`, `step`])),
  • dtype - 返回结果的数据类型,默认无,若无,则参考输入数据类型。
>>> import numpy as np
>>> np.linspace(-3,3,11)
array([-3. , -2.4, -1.8, -1.2, -0.6,  0. ,  0.6,  1.2,  1.8,  2.4,  3. ])

十,分箱

按照bins(顺序)分箱数组,把数据点划分到不同的分箱中,并返回分箱的索引:

numpy.digitize(data,bins)

十一,随机数生成

numpy.random模块是对Python内置的random的升级,增加了一些用于搞笑生成多种概率分布的样本值的函数。

常用的numpy.random模块的函数:

  • seed:确定随机数生成器的种子
  • permutation:返回一个序列的随机排列
  • shuffle:对一个序列就地进行随机排列
  • rand:产生均匀分布的样本值
  • randint:从给定的上下限范围内随机选取正数
  • randn:产生标准正态分布
  • binomial:产生二项分布的样本值
  • normal:产生高斯正态分布的样本值
  • beta:产生Beta分布的样本值
  • chisquare:产生卡方分布的样本值
  • gamma:产生伽马分布的样本值
  • uniform:产生在[0,1]范围中均匀分布的样本值

例如,使用normal得到一个标准正态分布的4x4样本数组:

samples=np.random.normal(size=(4,4))

参考文档:

numpy中sum(axis=0)和axis=1的计算原理

原文地址:https://www.cnblogs.com/ljhdo/p/10275607.html

时间: 2024-11-05 17:54:59

numpy 学习 第2篇:ndarray 基础操作的相关文章

Python开发:NumPy学习(一)ndarray数组

一.数据维度 一个数据表达一个含义,一组数据表达一个或多个含义. 数据维度概念:一组数据的组织形式,其中有一维数据.二维数据.多维数据.高维数据. 1.  一维数据 一维数据由对等关系的有序或无序数据构成,采用线性方式组织. 对应:列表.集合 #列表有序 [1,2,3,4,5] #集合无序 {1,2,3,4,5} 2.二维数据 二维数据由多个一维数据构成,是一维数据的组合形式. 对应:列表 [[1,2,3],[4,5,6]] 3.多维数据 多维数据由一维或二维数据在新维度上扩展形成. 对应:列表

python学习之路-1 python基础操作

变量 变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型. 变量在程序中就是用一个变量名表示了,变量名必须是大小写英文.数字和_的组合,且不能用数字开头. 例如: x = 100 # 变量x是一个整数 name = 'zhangcong' # 变量name是一个字符串 Answer = True # 变量v是一个布尔值 _name = 'xxxxx' # 以下划线开头也是可以的,但是不建议 常量 常量就是不能变的变量,比如常用的数学常数π就

Java 学习第五篇--Java基础语法

1.Java关键字 定义:被Java语言赋予特定含义的单词      注意:goto和const 是Java的保留字 用于定义访问权限修饰符的关键字   private   protected   public 用于定义类,函数,变量修饰符的关键字 abstract   final   static   synchronized 用于定义类与类之间关系的关键字 extends   implements 用于定义建立实例及引用实例,判断实例的关键字 new   this   super   ins

学习Numpy基础操作

# coding:utf-8 import numpy as np from numpy.linalg import * def day1(): ''' ndarray :return: ''' lst = [[1, 2, 3], [4, 5, 6]] print(type(lst)) np_lst = np.array(lst) print(type(np_lst)) np_lst = np.array(lst, dtype=np.float) # bool # int,int8,int16,

JAVA学习篇--JSTL基础

JSTL是什么 JSTL(JSP Standard TagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库. 为什么要用JSTL 我们JSP用于开发信息展现页非常方便;也可以嵌入java代码(scriptlet.表达式和声明)代码用来实现相关逻辑控制.看下面程序.但这样做会带来如下问题: jsp维护难度增加;出错提示不明确,不容易调试; 分工不明确;(即jsp开发者是美工,也是程序员); 最终增加程序的开发成本; <% if (session.getAttribute(

Emacs学习心得之 基础操作

1.前言与学习计划2.Emacs基础操作 一. 前言与学习计划 本篇博文记录了Emacs的一些基础操作与概念,相关的阅读如下: (emacs tutorial 中文精简版 )    http://blog.chinaunix.net/uid-24386676-id-119687.html (emacs user's guide)  http://www.cbi.pku.edu.cn/chinese/documents/csdoc/emacs/ (学习Emacs系列教程 )  http://www

科学计算库Numpy基础操作

pycharm,python3.7,numpy版本1.15.1 2018年9月11日04:23:06 """ 科学计算库Numpy基础操作 时间:2018\9\11 0011 """ import numpy print("""\n------以矩阵的方式读取数据------\n ------------genfromtxt函数('文件路径',delimiter = '分隔符',dtype = 读取方式)------

Linux学习笔记——第一篇——Ubuntu安装与操作

笔者是Windows的使用者,由于Coding的需要以及在Linux下开发的方便,所以开始使用Linux. 当然笔者还是割舍不下Windows的,毕竟很多通讯工具等软件以及游戏在Linux下是没有发行的,所以笔者使用了虚拟机啊. 下面给出简单的安装过程. 1.下载虚拟机软件,笔者比较喜欢VMPlayer,因为它比较轻便且免费,并且很好的支持了拖拽复制功能(VM TOOL),当然也可以使用如VirtualBox.VPC等 链接:https://my.vmware.com/web/vmware/fr

MongoDB 学习笔记(一)基础篇

1.MongoDB 特点 面向集合存储,存储对象类型的数据方便 模式自由,不需要定义任何模式(schma) 动态查询 完全索引,包含内部对象 复制和故障恢复方便 高效的二进制数据存储 支持c# 平台驱动 2.体系结构 一台服务器可以创建多个Server 实例和数据库,(推荐一天server 机器创建一个实例), 数据库:MongoDB 中的一系列与磁盘有关的物理文件(数据文件,日志文件等). 数据逻辑结构:文档 (documnet) 集合(collection) 数据库(database). d