numpy——数组存取

1、常规办法:数组元素的存取方法和Python的标准方法相同
a = np.arange(10)
    #>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 # # # 获取某个元素
print(a[3])
    #>> 3
 # # #  切片[3,6),左闭右开
print(a[3:6])
    #>> [3, 4, 5]
 # # # 省略开始下标,表示从0开始
print a[:5]
    #>>[0, 1, 2, 3, 4]
 # # # 下标为负表示从后向前数
print( a[3:])
    #>>[3, 4, 5, 6, 7, 8, 9]
 # # # 步长为2
print a[1:9:2]
    #>>[1, 3, 5, 7]
 # # # 步长为-1,即翻转
print (a[::-1])
#>>[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
 # # # 切片数据是原数组的一个视图,与原数组共享内容空间,可以直接修改元素值
a[1:4] = 10, 20, 30
print( a)
#>>[ 0, 10, 20, 30,  4,  5,  6,  7,  8,  9]
 # # # 因此,在实践中,切实注意原始数据是否被破坏,如:
b = a[2:5]
b[0] = 200
print( a)
 #>>[  0  10 200  30   4   5   6   7   8   9]
2、整数/布尔数组存取1)整型  # 根据整数数组存取:当使用整数序列对数组元素进行存取时,将使用整数序列中的每个元素作为下标,整数序列可以是列表(list)或者数组(ndarray)。  # 使用整数序列作为下标获得的数组不和原始数组共享数据空间。
    a = np.logspace(0, 9, 10, base=2)
    print (a)
    #>>[  1.,   2.,   4.,   8.,  16.,  32.,  64., 128., 256., 512.]

    i = np.arange(0, 10, 2)
    print i
    #>>[0, 2, 4, 6, 8]

# # # 利用i取a中的元素
    b = a[i]
    print b
    # # b的元素更改,a中元素不受影响
    b[2] = 1.6
    print b
    #>>[  1. ,   4. ,   1.6,  64. , 256. ]
    print a
    #>>[  1.,   2.,   4.,   8.,  16.,  32.,  64., 128., 256., 512.]

2)布尔数

使用布尔数组i作为下标存取数组a中的元素:返回数组a中所有在数组b中对应下标为True的元素
# 生成10个满足[0,1)中均匀分布的随机数
a = np.random.rand(10)
print(a)
#>>array([0.18508752, 0.46099816, 0.80814244, 0.34301555, 0.92376581, 0.23402939, 0.74400314, 0.55217242, 0.46284303, 0.61656194])
# 大于0.5的元素索引print(a > 0.5) #>>[False False  True False  True False  True  True False  True]

# 大于0.5的元素b = a[a > 0.5]print(b)#>>[0.80814244, 0.92376581, 0.74400314, 0.55217242, 0.61656194]

# 将原数组中大于0.5的元素截取成0.5a[a > 0.5] = 0.5
#>>[0.18508752, 0.46099816, 0.5       , 0.34301555, 0.5       , 0.23402939, 0.5       , 0.5       , 0.46284303, 0.5       ]
# b不受影响

3) 二维数组的切片

    # [[ 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 = np.arange(0, 60, 10)    # 行向量
    print (a)
    #>>[ 0, 10, 20, 30, 40, 50]

    b = a.reshape((-1, 1))      # 转换成列向量
    print (b)
    #>>[[ 0],
     #     [10],
     #     [20],
     #     [30],
     #     [40],
     #     [50]]

    c = np.arange(6)
    print(c)    #>>[0, 1, 2, 3, 4, 5]
    f = b + c   # 行 + 列
    print(f)
  #>>  [[ 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 = np.arange(0, 60, 10).reshape((-1, 1)) + np.arange(6)
    print(a)
  #>>[[ 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]]

    # 二维数组的切片
    print( a[(0,1,2,3), (2,3,4,5)] ) #>>[ 2, 13, 24, 35]
    print( a[3:, [0, 2, 5]])
    #>>[[30, 32, 35],
     #     [40, 42, 45],
     #     [50, 52, 55]]

    i = np.array([True, False, True, False, False, True])
    print( a[i])
# >> [[ 0,  1,  2,  3,  4,  5],
    #   [20, 21, 22, 23, 24, 25],
    #   [50, 51, 52, 53, 54, 55]]

    print( a[i, 3])
# >>[ 3, 23, 53]
 

原文地址:https://www.cnblogs.com/Theo-sblogs/p/12264697.html

时间: 2024-10-29 06:04:59

numpy——数组存取的相关文章

NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构

本文摘自<用Python做科学计算>,版权归原作者所有. 上一篇讲到:NumPy-快速处理数据--ndarray对象--数组的创建和存取 接下来接着介绍多维数组的存取.结构体数组存取.内存对齐.Numpy内存结构 一.多维数组的存取 多维数组的存取和一维数组类似,因为多维数组有多个轴,因此它的下标需要用多个值来表示,NumPy采用组元(tuple)作为数组的下标.如二维数组需要(x, y)的元组标记一个数组元素:三维数组需要(x, y, z)的元组标记一个元素. 如下图所示,a为一个6x6的二

numpy数组、向量、矩阵运算

可以来我的Github看原文,欢迎交流. https://github.com/AsuraDong/Blog/blob/master/Articles/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/numpy%E6%95%B0%E7%BB%84%E3%80%81%E5%90%91%E9%87%8F%E3%80%81%E7%9F%A9%E9%98%B5%E8%BF%90%E7%AE%97.md import numpy as np import pandas as pd

数据分析与展示——NumPy数据存取与函数

NumPy库入门 NumPy数据存取和函数 数据的CSV文件存取 CSV文件 CSV(Comma-Separated Value,逗号分隔值)是一种常见的文件格式,用来存储批量数据. np.savetxt(frame,array,fmt='%.18e',delimiter=None) frame:文件.字符串或产生器,可以是.gz或.bz2的压缩文件. array:存入文件的数组. fmt:写入文件的格式,例如:%d %.2f %.18e. delimiter:分割字符串,默认是任何空格. 范例

Python数据分析与展示(1)-数据分析之表示(1)-NumPy数据存取与函数

NumPy数据存取与函数 数据的CSV文件存取 CSV文件 CSV(Comma-Separated Value,逗号分隔值) CSV是一种常见的文件格式,用来存储批量数据. 将数据写入CSV文件 np.savetxt(frame, array, fmt='%.18e', delimiter=None) -frame: 文件.字符串或产生器,可以是.gz或.bz2的压缩文件 -array: 存入文件的数组 -fmt: 写入文件的格式,例如:%d %.2f %.18e -delimiter:分割字符

numpy 数组对象

numpy 数组对象NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:实际的数据,描述这些数据的元数据# eg_v1 import numpy as np a = np.arange(5) # 创建一个包含5个元素的NumPy数组a,取值分别为0~4的整数 print (a) # [0 1 2 3 4] print (a.dtype) # dtype 查看数组的数据类型 # int32 (数组a的数据类型为int32) # 确定数组的维度(数组的shape属性返回一个元组(tu

Python numpy数组扩展效率问题

Numpy库的ndarray数组可以方便地进行各种多维数据处理工作 可是它最大的缺点就是不可动态扩展--"NumPy的数组没有这种动态改变大小的功能,numpy.append()函数每次都会重新分配整个数组,并把原来的数组复制到新数组中."(引用自http://blog.chinaunix.net/uid-23100982-id-3164530.html) 场景: 今天用ndarray处理 42000 条数据时,就遇到了数组扩展的效率问题 文件名:train.csv(后附下载) 文件大

numpy数组广播

numpy数组的广播功能强大,但是也同时让人疑惑不解,现在让我们来谈谈其中的原理. 广播原则: 如果两个数组的后缘维度(即:从末尾开始算起的维度)的轴长相符或其中一方的长度为1,则认为它们是广播兼容的,广播会在缺失和(或)长度为1的轴上进行. 上面的原则很重要,是广播的指导思想,下面我们来看看例子. 1.其实在最简单的数组与标量数字之间的运算就存在广播,只是我们把它看作理所当然了. 2.再看下一个例子,这个大家都会一致认为这是广播了 根据广播原则:arr1的shape为(4,1),arr2的sh

【Python实战15】NumPy数组的创建

NumPy提供了一个N维数组对象,即:ndarray.ndarray是一个通用的同构数据多维容器,也就是说,其中的所有元素必须是相同类型的. 创建ndarray数组 创建数组最简单的方式就是使用array函数,它接受一切序列型的对象,然后产生一个新的含有传入数据的NumPy数组.如下: 嵌套的序列将会被转换为一个多为数组: 除非显示的说明,np.array会尝试为新建的这个数组推断出一个较为合适的数据类型,我们可以通过dtype来进行查看,比如上面刚建立的数组类型为:int32类型:另,我们可以

NumPy数组基本的索引和切片

对一维数组来说,NumPy数组的索引切片与Python列表的功能差不多: >>> arr array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> arr[3] 3 >>> arr[2:6] array([2, 3, 4, 5]) >>> arr[3:] array([3, 4, 5, 6, 7, 8, 9]) 但是,特别注意的是,如果要将一个标量值赋值给一个切片,这个修改会直接反映到源数组上(即使你已经新建