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

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 nparray2=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]

  

总结:

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

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

原文地址:https://www.cnblogs.com/-wenli/p/10263324.html

时间: 2024-11-25 14:32:47

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

Shallow copy and Deep copy

一.来自wikipidia的解释: Shallow copy One method of copying an object is the shallow copy. In that case a new object B is created, and the fields values of A are copied over to B. This is also known as a field-by-field copy,field-for-field copy, or field co

python中的shallow copy 与 deep copy

今天在写代码的时候遇到一个奇葩的问题,问题描述如下: 代码中声明了一个list,将list作为参数传入了function1()中,在function1()中对list进行了del()即删除了一个元素. 而function2()也把list作为参数传入使用,在调用完function1()之后再调用function2()就出现了问题,list中的值已经被改变了,就出现了bug. 直接上代码: list = [0, 1, 2, 3, 4, 5] def function1(list): del lis

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

本文来自 这里,原文作者微博MicroCai 概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对象内存到另一块内存中. 一图以蔽之 再简单些说:浅复制就是指针拷贝:深复制就是内容拷贝. 集合的浅复制 (shallow copy) 集合的浅复制有非常多种方法.当你进行浅复制时,会向原始的集合发送retain消息,引用计数加1,同时指针被拷贝到新的集合. 现在让我们看一些浅复制的例子: NSArray *shallowCop

Python 深浅拷贝 (Shallow copy and Deep copy in Python)

前言 昨天刷公众号看到一篇描述py优雅语法的文章,心痒之下到家就开始尝试,学习了for else statement,yield和py版三目写法.在列表切片这部分中,对作者的列表拷贝写法,有些不太理解. # 拷贝 copy_items = items[::] 或者 items[:] 尝试 首先开一个python,随便建一个列表l=[1,2,3]将其进行两种方法的拷贝: 我的写法 c=l 作者的写法 d=l[:] 分别打印了c和d,并没有什么差别,仔细斟酌了一下作者的用意,觉得应该有一些深层次的考

乐哥学AI_Python(二):Numpy索引,切片,常用函数

Numpy的索引和切片 ndarray对象的内容可以通过索引和切片查看和修改. 索引:ndarray对象中的元素索引基于0开始 切片:对数组里某个片段区域的描述 数组的切片也可以理解为原始数组的局部视图,都是指向内存中的原始数组,所以不同于列表复制,切片上的修改都会直接反映到原始数组上. 索引切片的实例代码演示: Numpy常用函数的代码演示: Numpy的置换函数transpose.T和swapaxes演示与区别 T适用于一.二维数组 arr = np.arange(12).reshape(3

Python:Numpy学习

1 import numpy as np 2 # 基础属性 3 array = np.array([[[1,2,3], [0,0,1]], [[1,2,3], [0,0,1]]], 4 dtype = np.int64) 5 6 print(array) 7 print(array.ndim) # number of dim 8 print(array.shape) # shape 9 print(array.size) # number of elements 10 print(array.d

Summary: Deep Copy vs. Shallow Copy vs. Lazy Copy

Object copy An object copy is an action in computing where a data object has its attributes copied to another object of the same data type. An object is a composite data type in object-oriented programming languages. The copying of data is one of the

Numpy学习二:数组的索引与切片

1.一维数组索引与切片#创建一维数组arr1d = np.arange(10)print(arr1d) 结果:[0 1 2 3 4 5 6 7 8 9] #数组的索引从0开始,通过索引获取第三个元素arr1d[2] 结果:2 #切片,左闭右开区间,从索引3开始,直到索引7结束 arr1d[3:8] 结果:array([3, 4, 5, 6, 7]) #数组脚标由右往左是从-1开始,每向左一位脚标数字减1,获取最后一个元素arr1d[-1] #等价arr1d[9] 结果:9 #将标量赋值给切片,会

numpy数组的索引和切片

numpy数组的索引和切片 基本切片操作 >>> import numpy as np >>> arr=np.arange(10) >>> arr array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> arr[5] 5 >>> arr[5:8] array([5, 6, 7]) 切片赋值操作 1.切片赋一个值对应原来数组中的值也会变 >>> arr[5:8]=12 &g