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. js 前台ajax验证马克一下

    function check_form(){ var email=$("#email").val(); var code=$("#code").val(); v ...

  2. ES6 Babel 简单使用

    ECMAScript 是 JS 的语言标准.而 ES6 是新的 JS 语法标准. PS:严格来说,ECMAScript 还包括其他很多语言的语言标准. ECMAScript 发展历史 1995年:EC ...

  3. tyvj 1091 等差数列 dp

    P1091 等差数列 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 广东汕头聿怀初中 Train#3 Problem 3 描述 等差数列的定义是一个数列S, ...

  4. Boot 横向布局

    <div class="form-group"> <label for="name" class="col-lg-2 control ...

  5. Java容器_01

    1. HashTable 和 HashMap 区别? 2.

  6. POJ3275:Ranking the Cows(Bitset加速floyd求闭包传递)

    Each of Farmer John's N cows (1 ≤ N ≤ 1,000) produces milk at a different positive rate, and FJ woul ...

  7. python 图像库PIL详解

    PIL详细文档 The most important class in the Python Imaging Library is the Image class, defined in the mo ...

  8. python函数式编程之高阶函数学习

    基本概念 函数式编程,是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量.因此,任意一个函数,只要输入确定,输出就确定的这种函数我们称之为纯函数,我们称这种函数没有副作用.而允许使用 ...

  9. mysql中开启慢查询日志

    开启慢查询日志,需要在配置文件my.ini中配置. long_query_time = 1 #设置慢查询时间,配置是下划线log-slow-queries = d:\mysql5\logs\mysql ...

  10. pdb 源码索引符号服务器创建过程

    pdb是调试程序必不可少的东西,它保存着一个exe或dll的调试信息,对pdb进行源码索引可以快速找到软件对应该版本的代码,本文以subversion版本控制服务器进行介绍 一.需要安装的软件 win ...