Numpy

ndarray

numpy的最重要特点就是其N维数组对象(ndarray)。

ndarray的可以对整块数据执行数学运算,语法与标量元素的元素的运算一致。

如:

import numpy as np
x = array([[-0.50043612, -1.99790499, 0.66098891, 0.26490388],
[-1.02531769, 0.50054972, -1.30755871, 1.53881345]])
x + x #相加
Out[10]:
array([[-1.00087224, -3.99580998, 1.32197782, 0.52980775],
[-2.05063538, 1.00109944, -2.61511741, 3.0776269 ]]) x * 10 #乘以标量
Out[11]:
array([[ -5.0043612 , -19.97904992, 6.60988909, 2.64903877],
[-10.25317691, 5.00549718, -13.07558707, 15.38813451]]) 1 / x #1/x被除
Out[5]:
array([[-1.99825704, -0.5005243 , 1.51288469, 3.77495415],
[-0.97530747, 1.99780353, -0.76478401, 0.64985135]]) x - x #相减
Out[12]:
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
  • shape查询数组维度
  • ndim数组的维数
  • dtype查询数组数据类型
x.shape
Out[13]: (2, 4) # 2行4列 x.ndim
Out[15]: 2 # 2维 x.dtype
Out[14]: dtype('float64') #数据类型

创建ndarray

1. array函数

将输入数据(列表,元组,数组,或其他),转换为ndarray

y = list(range(1,11)) #如果直接输入y = range(1,11),会返回一个迭代器。
y
Out[33]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] arr1 = np.array(y)
arr1
Out[35]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) z = [[1, 2, 3, 4],[5, 6, 7, 8]]# 生成一个嵌套序列(一组等长列表组成的列表)
arr2 = np.array(z)
arr2
Out[44]:
array([[1, 2, 3, 4],
[5, 6, 7, 8]])

2. asarray函数

将输入转换为ndarray,若本身是ndarray则不复制。

3. arange函数

arange()是python内置函数range()的数组版。

arange()生成一个一维数组,range生成列表。

np.arange(11) #可对比上文的range理解。
Out[45]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

4. ones,ones_like函数

这里必须说明一下,如果ndarray没有指定数据类型,则默认为float64(浮点数)。

ones根据指定的形状和dtype创建一个全1数组。

ones_like以另一个数组为参数,并根据其形状和dtype创建一个全1数组。

np.ones(2) #默认一维
Out[46]: array([ 1., 1.]) np.ones((2,3))
Out[47]:
array([[ 1., 1., 1.],
[ 1., 1., 1.]]) np.ones(3,dtype = np.int32) # 指定数据类型
Out[51]: array([1, 1, 1]) np.ones_like(arr2) #以arr2为参数
Out[54]:
array([[1, 1, 1, 1],
[1, 1, 1, 1]])

5. zeros,zeros_like函数

类似与onesones_like,但是创建的是全0数组。

6. empty,empty_like函数

创建新数组,分配内存空间,但不填充任何值。


np.empty(2)
Out[56]: array([ 0., 0.]) np.empty((2,4)) #2 * 4
Out[57]:
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]) np.empty_like(arr2) #以arr2为参数
Out[60]:
array([[0, 0, 0, 0],
[0, 0, 0, 0]])

看到这里你是不是以为np.empty会返回全0数组?

其实不是的。

np.empty((3,3,2)) # 3维数组
Out[58]:
array([[[ 6.23042070e-307, 4.67296746e-307],
[ 1.69121096e-306, 1.33512376e-306],
[ 1.33511562e-306, 1.11256817e-306]], [[ 1.06811422e-306, 1.42417221e-306],
[ 1.11260619e-306, 8.90094053e-307],
[ 1.86919378e-306, 1.06809792e-306]], [[ 1.37962456e-306, 1.69111861e-306],
[ 1.78020169e-306, 1.37961777e-306],
[ 7.56599807e-307, 2.56761491e-312]]])

7. eye,identity函数

返回一个N介单位矩阵。

np.eye(5) # 创建5介单位阵
Out[61]:
array([[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 1.]]) np.identity(5) #创建5介单位阵
Out[63]:
array([[ 1., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 1.]])

eye(N, M = None, k = 0,dtype =float)

第一个参数N = 行数。

第二个参数 M = 列数,省略代表M = N 。

第三个参数 k 代表对角线位置, = 0 代表主对角线, +1就向右上方偏移1, -1 就向左下角偏移1。

第四个参数表示类型 dtype 默认为 float 类型。

np.eye(4,k = 1) #向上偏移
Out[69]:
array([[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.],
[ 0., 0., 0., 0.]]) np.eye(4,k = -1) #向下偏移
Out[70]:
array([[ 0., 0., 0., 0.],
[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.]]) np.eye(4,8) #给定M
Out[67]:
array([[ 1., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 1., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 1., 0., 0., 0., 0.]])

ndarray的数据类型

numpy所支持的数据类型如下:

数据类型 描述
bool_ 以字节存储的布尔值(True 或 False)
int_ 默认的整数类型(和 C 的 long 一样,是 int64 或者 int32)
intc 和 C 的 int 相同(一般为 int64 或 int32)
intp 用于下标的整数(和 C 的 ssize_t 相同,一般为int64 或者 int32)
int8 字节(-128 到 127)
int16 整数(-32768 到 32767)
int32 整数(-2147483648 到 2147483647)
int64 整数(-9223372036854775808 到 9223372036854775807)
uint8 无符号整数(0 到 255)
uint16 无符号整数(0 到 65535)
uint32 无符号整数(0 到 4294967295)
uint64 无符号整数(0 到 18446744073709551615)
float_ float64 的简写
float16 半精度浮点:1位符号,5位指数,10位尾数
float32 单精度浮点:1位符号,8位指数,23位尾数
float64 双精度浮点:1位符号,11位指数,52位尾数
complex_ complex128 的简写
complex64 由两个32位浮点(实部和虚部)组成的复数
complex128 由两个64位浮点(实部和虚部)组成的复数
string_ 固定长度的字符创类型(每个字符一个字节)

很难记住这些numpy的dtype。我们只需要控制存储类型即可。

arr1 = np.array([1, 2, 3],np.int32)
arr2 = np.array([2,3,4],dtype = np.float64) arr1.dtype
Out[14]: dtype('int32')
arr2.dtype
Out[11]: dtype('float64')

.astype()方法可以显式的转换为dtype。


float_arr1 = arr1.astype(np.float64) #整型转换为浮点型 float_arr1.dtype
Out[16]: dtype('float64') float_arr1
Out[17]: array([ 1., 2., 3.])

浮点型转换为整型,只保留整数部分。

arr3 = np.array([2.3, -1.32, -5.9, 4.8])

arr3
Out[25]: array([ 2.3 , -1.32, -5.9 , 4.8 ]) arr3.astype(np.int32)#转换为整数
Out[26]: array([ 2, -1, -5, 4]) #可看到小数部分被丢弃了

有时某个字符串不能被转换为float64,就会引发TypeError,因此,我们可以懒一点,

像下面这样写:


n_strings = np.array(['1.23','-9.6','23'],dtype = np.string_) n_strings.astype(np.float)
Out[32]: array([ 1.25656565, -9.6 , 23. ]) n_strings.astype(np.float64)
Out[30]: array([ 1.25656565, -9.6 , 23. ]) n_strings
Out[35]:
array([b'1.256565653', b'-9.6', b'23'],
dtype='|S11')

可以看到这两种结果一致。

numpy会将其数据类型映射到等价的dtype上。

可以发现,使用.astype()新创建了一个数组(原数组的一种拷贝),即使,与原来数据类型一致也会如此。

numpy之初识ndarray的更多相关文章

  1. NumPy学习_00 ndarray的创建

    1.使用array()函数创建数组 参数可以为:单层或嵌套列表:嵌套元组或元组列表:元组或列表组成的列表 # 导入numpy库 import numpy as np # 由单层列表创建 a = np. ...

  2. NumPy学习_01 ndarray相关概念

    1.NumPy库 NumPy = Numerical Python 是高性能科学计算和数据分析的基础库. pandas库充分借鉴了NumPy的相关概念,先行掌握NumPy库的用法,才能把pandas的 ...

  3. 3.1Python数据处理篇之Numpy系列(一)---ndarray对象的属性与numpy的数据类型

    目录 目录 (一)简单的数组创建 1.numpy的介绍: 2.numpy的数组对象ndarray: 3.np.array(list/tuple)创建数组: (二)ndarray对象的属性 1.五个常用 ...

  4. numpy中的ndarray方法和属性

    原文地址 NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是 ...

  5. NumPy学习_02 ndarray基本操作

    1.算术运算符 它们只用于位置相同的元素之间,即为元素级的运算. 所得到的运算结果组成一个新的数组. 不用编写循环即可对数据执行批量运算.(矢量化) import numpy as np # 创建一个 ...

  6. 3.2Python数据处理篇之Numpy系列(二)--- ndarray数组的创建与变换

    目录 (一)ndarray数组的创建 1.从列表以元组中创建: 2.使用函数创建: (二)ndarray数组的变换 1.维度的变换: 2.类型的变换: 目录: 1.ndarray数组的创建 2.nda ...

  7. numpy中的ndarray与pandas中的series、dataframe的转换

    一个ndarray是一个多维同类数据容器.每一个数组有一个dtype属性,用来描述数组的数据类型. Series是一种一维数组型对象,包含了一个值序列,并且包含了数据标签----索引(index). ...

  8. 一次和matplotlib和numpy的初识及简单的异常值清理

    1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ...

  9. 3.4Python数据处理篇之Numpy系列(四)---ndarray 数组的运算

    目录 目录 (一)数组与标量的运算 1.说明: 2.实例: (二)元素级的运算(一元函数) 1.说明: 2.实例: (三)数组级的运算(二元函数) 1.说明: 2.实例: 目录 1.数组与标量的运算 ...

随机推荐

  1. 【Java并发】Executor框架

      Executor框架简介 Java的线程既是工作单元,也是执行机制.从JDK5开始,把工作单元和执行机制分离开来. Executor框架由3大部分组成 任务. 被执行任务需要实现的接口:Runna ...

  2. ThinkPHP开发博客系统笔记之二

    1. 登陆验证码 当用户登陆的时候我们希望也弹出验证码,有两种方法可以实现:一是再增加一个弹出验证码的dialog,二是和注册共用一个验证码dialog.第一种方法有大量重复代码,所以我们使用第二种方 ...

  3. [洛谷3041]视频游戏的连击Video Game Combos

    题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only v ...

  4. codevs.cn 2776寻找代表元 最大流解法

    网址:http://codevs.cn/problem/2776/ 题目大意: n个社团,m个人,每个社团可以有一个人担任代表,每个人可以担任多个代表,问最多有多少人是代表. 思路:可以建一个图,然后 ...

  5. Java 关于assert

    昨天在看NIO源码的时候,看到这样一句,顿时懵逼了 : assert (i >= 0); assert关键词我是有映像的, 中文叫断言.但是从来没有去了解过它的功能, 今天在感冒中抽出时间, 把 ...

  6. JavaWeb -- Struts2 构建视图:标签和结果, UI组件标签

    1. 示例 action 注入数据 和 处理action /** * OgnlAction */ public class UiAction extends ActionSupport { priva ...

  7. centos 安装jdk/resin/mysql

    一.安装JDK 1.判断是否安装 java -version 我的计算机上使用java -version命令,内容如下: java version "1.7.0_45"OpenJD ...

  8. ButterKnife使用详谈

    (1)ButterKnife是什么? 在开发过程中,我们总是会写大量的findViewById和点击事件,像初始view.设置view监听这样简单而重复的操作让人觉得特别麻烦,当然不会偷懒的程序员不是 ...

  9. Python jieba 分词

    环境 Anaconda3 Python 3.6, Window 64bit 目的 利用 jieba 进行分词,关键词提取 代码 # -*- coding: utf-8 -*- import jieba ...

  10. H5测试

    H5是什么? H5的全称是HTML5,其实就是:移动端WEB页面. H5与原生 APP的区别: APP是使用原生系统内核的,相当于直接在系统上操作,是我们传统意义上的软件,更加稳定. H5的APP先得 ...