NumPy 数组对象

# 来源:NumPy Essentials ch2

数组索引和切片

# 创建 100x100 个 0~1 随机数
x = np.random.random((100, 100)) # 取第 42 行 87 列的元素(从零开始)
y = x[42, 87]# 取第 k 行的所有元素
# 等价于 x[k] 和 x[k, ...]
print(x[k, :]) a = np.array([[10 * y + x for x in range(6)] for y in range(6)])
'''
+--+--+--+--+--+--+
| 0| 1| 2| 3| 4| 5|
+--+--+--+--+--+--+
|10|11|12|13|14|15|
+--+--+--+--+--+--+
|20|21|22|23|24|25|
+--+--+--+--+--+--+
|30|31|32|33|34|35|
+--+--+--+--+--+--+
|40|41|42|43|44|45|
+--+--+--+--+--+--+
|50|51|52|53|54|55|
+--+--+--+--+--+--+
'''a[0, 3:5]
'''
array([3, 4])
+--+--+--+--+--+--+
|  |  |  | 3| 4|  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
'''a[4: ,4:]
'''
array([[44, 45],
       [54, 55]])
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |44|45|
+--+--+--+--+--+--+
|  |  |  |  |54|55|
+--+--+--+--+--+--+
'''a[:, 2]
'''
array([ 2, 12, 22, 32, 42, 52])
+--+--+--+--+--+--+
|  |  | 2|  |  |  |
+--+--+--+--+--+--+
|  |  |12|  |  |  |
+--+--+--+--+--+--+
|  |  |22|  |  |  |
+--+--+--+--+--+--+
|  |  |32|  |  |  |
+--+--+--+--+--+--+
|  |  |42|  |  |  |
+--+--+--+--+--+--+
|  |  |52|  |  |  |
+--+--+--+--+--+--+
'''a[2::2, ::2]
'''
array([[20, 22, 24],
       [40, 42, 44]])
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|20|  |22|  |  |24|
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|40|  |42|  |  |44|
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
'''

内存布局

# flags 属性保存了数组的内存布局信息
print x.flags
'''C_CONTIGUOUS : True F_CONTIGUOUS : False OWNDATA : True WRITEABLE : True ALIGNED : True UPDATEIFCOPY : False C_CONTIGUOUS:是否为 C 风格连续,也就是行为主,最后一个维度是连续的
F_CONTIGUOUS:是否为 F 风格连续,也就是列为主,第一个维度是连续的
OWNDATA:是否拥有数据,视图不拥有数据
WRITEABLE:是否可写
ALIGNED:是否对齐
UPDATEIFCOPY:
'''# NumPy 默认是 C 风格连续
c_array = np.random.rand(10000, 10000)
# 可以手动转换为 F 风格连续
f_array = np.asfortranarray(c_array) def sum_row(x):'''计算第零行的和'''return np.sum(x[0, :])
def sum_col(x):'''计算第零列的和'''return np.sum(x[:, 0])'''
我们可以看到,C 风格数组按行访问比较快
F 风格数组按列访问比较快%timeit sum_row(c_array)
10000 loops, best of 3: 21.2 µs per loop %timeit sum_row(f_array)
10000 loops, best of 3: 157 µs per loop %timeit sum_col(c_array)
10000 loops, best of 3: 162 µs per loop %timeit sum_col(f_array)
10000 loops, best of 3: 21.4 µs per loop
'''

副本和视图

# 视图不共享 NumPy 对象,共享底层数据
# 副本不共享 NumPy 对象,不共享底层数据x = np.random.rand(100,10)# 切片和索引都会产生视图
# 而不是副本
y = x[:5, :] # 看看底层内存是否一致
np.may_share_memory(x, y)
# True# 我们将 y 所有元素清零
y[:] = 0# 并打印 x 前 5 行
print(x[:5, :])
'''
[[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.] [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.] [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.] [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.] [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]]
'''# 但是这样不会产生视图
x = np.random.rand(100,10)
y = np.empty([5, 10])
y[:] = x[:5, :]
np.may_share_memory(x, y)
# False y[:] = 0
print(x[:5, :])

数组创建

# 最简单的方式就是从 Python 列表创建 NumPy 数组
x = np.array([1, 2, 3])
y = np.array(['hello', 'world']) # 但有时我们想创建范围内的数值数组
x = range(5)
y = np.array(x) # NumPy 有个辅助函数
# 等价于上面的操作
x = np.arange(5) # 多维数组也是一样的
x = np.array([[1, 2, 3],[4, 5, 6]]) x.ndim # 2
x.shape # (2, 3)# rand 创建指定形状的数组,元素为 0~1 的随机数
x = np.random.rand(2, 2, 2)
print(x.shape)
# (2, 2, 2)# random 和 rand 相似
# 只是接受元组形式的形状
shape_tuple = (2, 3, 4)
y = np.random.random(shape_tuple)
print(y.shape)
# (2, 3, 4) # randint(l, h, size=sz) 创建 l ~ h-1 的随机整数
# 默认是 10 个
LOW, HIGH = 1, 11
SIZE = 10
x = np.random.randint(LOW, HIGH, size=SIZE)
print(x)
[ 6  9 10  7  9  5  8  8  9  3] # 还有一些其它的创建函数
# zeros(size) 和 ones(size) 创建指定形状的全零或全一数组
# eye(n) 创建 n 维单位矩阵
# full(size, n) 创建指定形状的纯量数组,所有元素都为 n

数据类型


x = np.random.random((10,10)) # dtype 属性是数据类型
x.dtype
# dtype('float64') x = np.array(range(10))
x.dtype
# dtype('int32') x = np.array(['hello', 'world'])
x.dtype
# dtype('S5') # 创建数组时可以指定数据类型
# 我们可以传入 NumPy 类型
x = np.ones((10, 10), dtype=np.int)
x.dtype
# dtype('int32') # 也可以传入表示类型的字符串
x = np.zeros((10, 10), dtype='|S1')
x.dtype
# dtype('S1') # NumPy 会使用它们来构造 dtype
# 完整列表请见
# http://docs.scipy.org/doc/numpy/user/basics.types.html

NumPy 数组对象相关推荐

  1. [转载] Numpy数组对象ndarray

    参考链接: Numpy中的N维数组 ndarray Numpy数组对象ndarray 文章目录 Numpy数组对象ndarrayN维数组对象:ndarrayndarray对象的属性:ndarray的元 ...

  2. NumPy Essentials 带注释源码 二、NumPy 数组对象

    # 来源:NumPy Essentials ch2 数组索引和切片 # 创建 100x100 个 0~1 随机数 x = np.random.random((100, 100)) # 取第 42 行 ...

  3. python数组初始化_Python科学计算库Numpy数组的初始化和基本操作

    umPy系统是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵 ...

  4. python numpy数据类型_Python之numpy数组学习(一)

    原标题:Python之numpy数组学习(一) 我回来了. 前言 前面已经安装并学习了Python中的科学计算库,今天主要学习下numpy数组. Numpy数组对象 Numpy中的多维数组称为ndar ...

  5. NumPy — 创建全零、全1、空、arange 数组,array 对象类型,astype 转换数据类型,数组和标量以及数组之间的运算,NumPy 数组共享内存

    NumPy 简介 一个用 python 实现的科学计算包.包括: 1.一个强大的 N 维数组对象 Array : 2.比较成熟的(广播)函数库: 3.用于整合 C/C++ 和 Fortran 代码的工 ...

  6. 《利用Python》进行数据分析:Numpy基础1 数组对象ndarray

    #coding=utf-8__author__ = 'andy' import numpy as np '''数组.numpy数组.ndarray,基本都是一个东西'''#创建数组data1=[6,7 ...

  7. numpy基础1多维数组对象

    1 # coding: utf-8 2 # numpy ndarry:多维数组对象 3 import numpy as np 4 # 生成随机数组 5 data = np.random.randn(2 ...

  8. NumPy的数组对象:ndarray

    目录 一:前言 1:数据的维度 2:数据维度的Python表示 3:NumPy的介绍 4:NumPy的引用 5:计算a²+b²例子,其中a和b都是一维数组 二:N维数组对象:ndarray 1:nda ...

  9. 初识 Python 科学计算库之 NumPy(创建多维数组对象)

    文章目录 参考 描述 NumPy 特点 获取 导入 多维数组对象 np.array() np.asarray() 范围 随机 概览 np.random.randn() np.random.normal ...

最新文章

  1. 自动化运维工具Saltstack(一)
  2. c语言插入排序算法伪代码,排序算法——插入排序(C语言实现)
  3. OCS 2007 R2将前端加入到企业版池
  4. 干货分享:什么是Java设计工厂模式?
  5. 使用TestBed测试具有依赖关系的Angular服务
  6. python list长度_python的入门阶段 编程思维100题 我跟罗志祥没关系
  7. 32tomcat的目录结构
  8. 1070. 结绳(25)
  9. Linux终端命令(6)--ifconfig,(find -name ‘*.txt‘ | xargs rm -rf)
  10. 在ArcEngine中使用Geoprocessing工具-执行工具
  11. maven tomcat插件_Maven技术01
  12. win7中计算机被改为了句号,WIN7中中文输入法快捷键无法修改的解决方法.doc
  13. 阿姆达尔定律(Amdahl's law)
  14. 电脑坏了,疑似主板故障
  15. 使用svn merge 实现回退版本
  16. 网盘上传文件服务器失败原因,win7系统在百度网盘上传文件一直失败的解决方法...
  17. 裸辞半年,我靠Python闷声赚了20万
  18. ADS 修改绘图单位
  19. 打印服务spoolsv.exe应用程序错误解决方法
  20. 啊哈哈哈,鸡(面)汤(经)来喽~(得物,B站,百度),附答案总结

热门文章

  1. spring18-4: spring aop
  2. linux:安装mysql
  3. JAVA字符串前补零和后补零的快速方法
  4. javascript滚动文字
  5. ZYNQ EMIO使用及可重用封装
  6. 邮件服务器postfix+cyrus
  7. 基础知识(三)-网络
  8. 使用libcurl开源库和Duilib做的下载文件并显示进度条的小工具
  9. 相同格式EXCEL汇总
  10. Python成长之路第二篇(3)_字典的置函数用法