NumPy学习(索引和切片,合并,分割,copy与deep copy)

目录

索引和切片

合并

分割

copy与deep copy

  

索引和切片

通过索引和切片可以访问以及修改数组元素的值

一维数组

程序示例

import numpy as np

#索引与切片
array=np.arange(3,15)
print(array)
print(array[3])#数组下标为3的元素
print('\n')
print(array[1:3])#取从下标1到下标3,不包括下标3
print(array[1:-9])
print(array[-11:3])
print('\n')
print(array[:]) #全部元素
print(array[1:])#从下标为1的元素到最后一个元素
print(array[:7])#第一个元素到下标为7的元素,不包括下标为7的元素
print(array[::2])#间隔2

  

运行结果

[ 3  4  5  6  7  8  9 10 11 12 13 14]
6 [4 5]
[4 5]
[4 5] [ 3 4 5 6 7 8 9 10 11 12 13 14]
[ 4 5 6 7 8 9 10 11 12 13 14]
[3 4 5 6 7 8 9]
[ 3 5 7 9 11 13]

 

花式索引

程序示例

import numpy as np
#指定索引位置
index=[1,5,-7]
array3=array[index]
print(array3)
#使用布尔数组来花式索引
mask=np.array([0,1,0,1,1,0,1,0,1,0,0,1],dtype=bool)
array4=array[mask]
print(array4)

  

运行结果

[4 8 8]
[ 4 6 7 9 11 14]

  

多维 数组

程序示例

import numpy as np
array2=np.arange(3,15).reshape(3,4)
print(array2)
print(array2[2])#获取数组的某行
print('\n')
print(array2[2][2])#获取数组的某个元素,指定行和列
print(array2[2,2])
print('\n')
print(array2[2,:])#获取数组的第三行
print(array2[:,2])#获取数组的第三列
print(array2[1:3,1])#获取数组第2和3行的第二列元素
print(array2[1,1:3])#获取数组的第2行的2和3列
print('--------------------------------------------------')

#输出全部行,一行输出成一个列表
for row in array2:
print(row)
print('\n')
#输出全部列,一列输出成一个列表,array2.T为转置
for column in array2.T:
print(column)
print('\n')
#将数组展开为一个列表
print(array2.flatten())
print('\n')
#将数组展开为一个列表,其中array2.flat将数组变为迭代器,上面的flatten()方法则直接返回
for item in array2.flat:
print(item)

  

运行结果

[[ 3  4  5  6]
[ 7 8 9 10]
[11 12 13 14]]
[11 12 13 14] 13
13 [11 12 13 14]
[ 5 9 13]
[ 8 12]
[8 9]
--------------------------------------------------
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14] [ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14] [ 3 4 5 6 7 8 9 10 11 12 13 14] 3
4
5
6
7
8
9
10
11
12
13
14

  

花式索引
程序示例
import numpy as np
# 多维数组花式索引,我们需要给定行和列的值
arr1=np.array([[4,5,7,9],[2,4,6,8],[7,3,1,7]])
print(arr1)
print('\n')
#返回一条次对角线上的3个值
print(arr1[(0,1,2),(1,2,3)])
print('\n')
#返回的最后2行的第1,2,3列
print(arr1[1:,[0,1,2]])
#使用mask进行索引
print('\n')
mask=np.array([1,0,1,1],dtype=bool)
arr2=arr1[2,mask]
print(arr2)

 

运行结果

[[4 5 7 9]
[2 4 6 8]
[7 3 1 7]] [5 6 7] [[2 4 6]
[7 3 1]] [7 1 7]

  

合并

一维数组

程序示例

import numpy as np
array1=np.array([1,2,3])
array2=np.array([4,5,6])
array3=np.vstack((array1,array2)) #纵向合并
array4=np.hstack((array1,array2)) #横向合并
print(array3)
print(array1.shape)
print(array2.shape)
print(array3.shape)

运行结果

[[1 2 3]
[4 5 6]]
(3,)
(3,)
(2, 3)

  

import numpy as np

# #将列表转为numpy的数组
array1=np.array([1,2,3]).reshape(3,1)
array2=np.array([4,5,6]).reshape(3,1)
array3=np.vstack((array1,array2)) #纵向合并
array4=np.hstack((array1,array2)) #横向合并 array5=np.concatenate((array1,array2))
print(array5)
print('\n')
#对多个数组进行合并,axis=0为纵向合并,反之为横向合并
array6=np.concatenate((array1,array2),axis=1)
print(array6)

  

[[1]
[2]
[3]
[4]
[5]
[6]] [[1 4]
[2 5]
[3 6]]

  

分割

程序示例

import numpy as np

arr1=np.arange(12).reshape(3,4)
print(arr1) print('横向分割,对列进行分割,分割成2块')
print(np.split(arr1,2,axis=1))
print(np.hsplit(arr1,2)) print('纵向分割,对行进行分割,分割成3块')
print(np.split(arr1,3,axis=0))
print(np.vsplit(arr1,3)) print('不等量分割,(1为列,0为行)') print(np.array_split(arr1,3,axis=1))

  

运行结果

[[ 0  1  2  3]
[ 4 5 6 7]
[ 8 9 10 11]]
横向分割,对列进行分割,分割成2块
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
纵向分割,对行进行分割,分割成3块
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
不等量分割,(1为列,0为行)
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]

copy与deep copy

与原数组共享数据的形式

import numpy as np

arr=np.arange(4)
b=arr
c=arr
d=b print(arr)
print(b)
print(c)
print(d) print('修改arr[0]的值')
arr[0]=10 print(b is arr,b)
print(c is arr,c)
print(d is arr,d)

  

运行结果

[0 1 2 3]
[0 1 2 3]
[0 1 2 3]
[0 1 2 3]
修改arr[0]的值
True [10 1 2 3]
True [10 1 2 3]
True [10 1 2 3]

  

不与原数据共享数据的形式

import numpy as np

arr=np.arange(4)
b=arr.copy()
print(arr)
print(b) print('修改arr[0]的值')
arr[0]=10
print(arr)
print(b is arr,b)

  

运行结果

[0 1 2 3]
[0 1 2 3]
修改arr[0]的值
False [0 1 2 3]

  

总结:

如果你想把它们关联起来,就使用第一种方法

如果只是把一个数组的值给另一个数组,使用第二种方法

NumPy学习(索引和切片,合并,分割,copy与deep copy)的更多相关文章

  1. Shallow copy and Deep copy

    Shallow copy and Deep copy 第一部分: 一.来自wikipidia的解释: Shallow copy One method of copying an object is t ...

  2. python中的shallow copy 与 deep copy

    今天在写代码的时候遇到一个奇葩的问题,问题描述如下: 代码中声明了一个list,将list作为参数传入了function1()中,在function1()中对list进行了del()即删除了一个元素. ...

  3. numpy之索引和切片

    索引和切片 一维数组 一维数组很简单,基本和列表一致. 它们的区别在于数组切片是原始数组视图(这就意味着,如果做任何修改,原始都会跟着更改). 这也意味着,如果不想更改原始数组,我们需要进行显式的复制 ...

  4. Numpy:索引与切片

    numpy基本的索引和切片 import numpy as np arr = np.array([1,2,3,555,666,888,10]) arr array([ 1, 2, 3, 555, 66 ...

  5. shallow copy 和 deep copy 的示例

    本文属原创,转载请注明出处:http://www.cnblogs.com/robinjava77/p/5481874.html   (Robin) Student package base; impo ...

  6. copy&mutableCopy 浅拷贝(shallow copy)深拷贝 (deep copy)

    写在前面 其实看了这么多,总结一个结论: 拷贝的初衷的目的就是为了:修改原来的对象不能影响到拷贝出来得对象 && 修改拷贝出来的对象也不能影响到原来的对象 所以,如果原来对象就是imm ...

  7. copy和deep.copy

    https://blog.csdn.net/qq_32907349/article/details/52190796 加上crossin公众号上的可变对象与不可变对象 a=[1,2,3,[4]] b= ...

  8. Python:Numpy学习

    import numpy as np # 基础属性 array = np.array([[[1,2,3], [0,0,1]], [[1,2,3], [0,0,1]]], dtype = np.int6 ...

  9. Python学习-赋值、浅copy和深copy

    Python Copy: 在Python语言中,分为浅拷贝和深拷贝两种形式,也就是官方文档中的Shadow copy和Deep copy.在对简单的对象(object)进行复制时,两者没有区别,如下面 ...

随机推荐

  1. java程序运存扩容

    线上程序随着业务增多,运行的越来越慢,初步判定是因为内存分配的太小导致频繁的进行GC和OOM,于是着手增加内存上限. 增加内存上限都知道是修改java启动的opt,因为服务容器是tomcat 首先是在 ...

  2. [转]bus error与segment error

    在c程序中,经常会遇到段错误(segment error)和总线错误(bus error),这两种问题出现的原因可能如下 段错误: 对一个NULL指针解引用. 访问程序进程以外的内存空间. 实际上,第 ...

  3. 【python】pip安装报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 7: ordinal not in range(128)

    刚安装完python,准备pip安装第三方库的时候出现了一个错误: UnicodeDecodeError: ‘ascii’ code can’t decode byte 0xef in positio ...

  4. Principal components analysis(PCA):主元分析

    在因子分析(Factor analysis)中,介绍了一种降维概率模型,用EM算法(EM算法原理详解)估计参数.在这里讨论另外一种降维方法:主元分析法(PCA),这种算法更加直接,只需要进行特征向量的 ...

  5. python中的魔法参数:*args和**kwargs

    python中的魔法参数:*args和**kwargs def foo(*args, **kwargs):print 'args = ', argsprint 'kwargs = ', kwargsp ...

  6. Python之matplotlib库学习

    matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备, ...

  7. 查看Windows版本号

    1.Win+R,在运行中输入:msinfo32 2.在cmd中输入:ver 3.注册表(regedit)中:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows ...

  8. dump_stack的简单使用 【转】

    转自:http://blog.chinaunix.net/uid-26403844-id-3361770.html http://blog.csdn.net/ryfjx6/article/detail ...

  9. windows环境变量PATH顺序的重要性

    PATH是路径的意思,PATH环境变量中存放的值,就是一连串的路径.不同的路径之间,用英文的分号间隔开.系统在执行用户命令时,若用户未给出绝对路径,则首先在当前目录下寻找相应的可执行文件.批处理文件等 ...

  10. java 基础(转自索宁)

    一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...