Python数据分析个人笔记2

一、Numpy视图和副本

​ 副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置。视图是数据的一个别称或引用,通过该别称或引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置。

视图:看起来的样子

  • numpy 的切片操作返回原数据的视图。
  • 调用 ndarray 的 view() 函数产生一个视图。

副本:完全复制一个新的出来

  • Python 序列的切片操作,调用deepCopy()函数。
  • 调用 ndarray 的 copy() 函数产生一个副本。

二、Numpy索引和切片

​ ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

​ ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

1.索引

索引:数组名称[页,行,列]

import numpy as np
arr01 = np.arange(1,25).reshape(4,6)
# arr01[1][1]
arr01[1,1]

arr02 = arr01.reshape(2,4,3)
arr02[0,2,1]

2.切片

切片:数组名[行的开始值:行的结束值:步长,列的开始值:列的结束值:步长]

array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9],
        [10, 11, 12]],

       [[13, 14, 15],
        [16, 17, 18],
        [19, 20, 21],
        [22, 23, 24]]])

arr02[0:2 ,1:3 ,1:3 ]

3.多维数组切片

print(a[0, 1:4]) # >>>[12 13 14]
print(a[1:4, 0]) # >>>[16 21 26]
print(a[::2,::2]) # >>>[[11 13 15]
                  #     [21 23 25]
                  #     [31 33 35]]
print(a[:, 1]) # >>>[12 17 22 27 32]

如你所见,通过对每个以逗号分隔的维度执行单独的切片,你可以对多维数组进行切片。因此,对于2D数组,我们的第一片定义了行的切片,第二片定义了列的切片。

注意,只需输入数字就可以指定行或列。上面的第一个示例从数组中选择第0列。

下面的图表说明了给定的示例切片是如何进行工作的。
在这里插入图片描述

4.高级索引

  • 整数数组索引:数组名[[页的索引],[行的索引],[列的索引]]

    array([[ 1,  7, 13, 19],
           [ 2,  8, 14, 20],
           [ 3,  9, 15, 21],
           [ 4, 10, 16, 22],
           [ 5, 11, 17, 23],
           [ 6, 12, 18, 24]])
    
    arr01[[1,2,3,],[0,1,2,]]
    
  • 布尔索引:数组名[条件]

    arr01[arr01>10]
    产生的是一个一维数组
    

三、Numpy 广播(Broadcast)

​ 广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。

​ 如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

广播的规则的简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:

  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1。

1.数组与数组的运算

  • 形状相同:对应每个位置的元素进行运算
  • 行数为1,列数相同
  • 列数为1,行数相同
import numpy as np 
 
a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
c = a * b 
print (c)

# 输出结果 [ 10  40  90 160]

2.数和数组的运算

  • 自动触发广播机制
import numpy as np 
 
a = np.array([[ 0, 0, 0],
           [10,10,10],
           [20,20,20],
           [30,30,30]])
b = np.array([1,2,3])
print(a + b)

# 输出结果 	 [[ 1  2  3]
# 			[11 12 13]
#	 		[21 22 23]
#			[31 32 33]]

四、Numpy迭代数组

1. 双层for循环

import numpy as np

arr01 = np.arange(1,13).reshape(4,3)
arr01

for item in arr01:
    for ele in item:
        print(ele)

2. array.flat

for item in arr01.flat:
    print(item)

3. np.nditer(array)

for item in np.nditer(arr01):
    print(item)

五、Numpy形状

1.视图变维

打印出来的样子是发生变化了,在内存中的本质没有发生变化。

array.reshape()

2.就地变维

array.flatten()

3.复制变维

array.flatten()
  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红陌樱花vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值