利用python进行数据分析,学习笔记1(numpy) ndarray的创建与修改

2023-10-28

我是通过学习mooc上嵩天老师的数据分析与展示和阅读《利用python进行数据分析》做出的笔记

 

import numpy as np

 

为了缩小代码量,公认约定使用np作为numpy

from numpy import * 往往实不可取的,因为它包含了与一些内置函数重名的函数

 

numpy通过np.array()可以将list/tuple转化为ndarray n维数组对象

 In [55]: a = [[1, 2, 3], [4, 5, 6]]
 
 In [56]: np.array(a)
 Out[56]:
 array([[1, 2, 3],
        [4, 5, 6]])

 

ndarray一般是要元素类型一致的,不一致会变成以下实例:

In [130]: L = [1.2, 3, 5]

In [131]: np.array(L)
Out[131]: array([ 1.2,  3. ,  5. ])

In [132]: np.array(L).astype(np.int32)
Out[132]: array([1, 3, 5])

 

而且ndarray如果每一行的列数不对齐,或者说同一维度上秩(秩,即轴的数量或维度的数量)不一样,会生成object类型

In [134]: np.array(L)
Out[134]: array([list([2, 3, 4]), list([1, 2])], dtype=object)

 

 

python有了list,我们为什么还要ndarray?

1.ndarray底层使用c实现的

 In [6]: %time my_list = list(range(1000000))
 Wall time: 26.1 ms
 In [2]: %time my_arr = np.arange(1000000)
 Wall time: 2 ms

比list快10倍100倍,有时候可能还不止

2.计算方便啊

 In [63]: %time for _ in range(10): my_arr2 = my_arr * 2
 Wall time: 37.1 ms
 
 In [64]: my_arr2
 Out[64]: array([      0,       2,       4, ..., 1999994, 1999996, 1999998])
 In [65]: %time for _ in range(10): my_list2 = [i * 2 for i in my_list]
 Wall time: 1.21 s

不同大小的数组之间的运算叫做广播(broadcasting),这里不做介绍

 

ndarry的元素类型(图片来源网络,侵删)

 

我们拿刚才的例子做一个test

In [67]: my_arr
Out[67]: array([     0,      1,      2, ..., 999997, 999998, 999999])

In [68]: my_arr.ndim
Out[68]: 1

In [69]: my_arr.shape
Out[69]: (1000000,)

In [70]: my_arr.size
Out[70]: 1000000

In [71]: my_arr.dtype
Out[71]: dtype('int32')

In [72]: my_arr.itemsize
Out[72]: 4

拿二维的对比一下

In [85]: my_arr2 = np.array(range(100), range(100))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

这里找到了自己以前对range函数的一个误区,它只是看起来像list,range(10)这种并不会返回[1, 2, 3 ....]因为他不是list,引用官方原话:

In many ways the object returned by range() behaves as if it is a list, but in fact it isn’t. It is an object which returns the successive items of the desired sequence when you iterate over it, but it doesn’t really make the list, thus saving space.

We say such an object is iterable, that is, suitable as a target for functions and constructs that expect something from which they can obtain successive items until the supply is exhausted. We have seen that the for statement is such an iterator. The function list() is another; it creates lists from iterables:

 

所以我重新建立一个二维的来比对一下

In [89]: my_arr2 = np.array( [list(range(100)), list(range(100))] )

In [90]: my_arr2
Out[90]:
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
        17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
        34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
        51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
        68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
        85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99],
       [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
        17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
        34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
        51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
        68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
        85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])

In [96]: my_arr2.ndim
Out[96]: 2

In [97]: my_arr2.shape
Out[97]: (2, 100)

In [98]: my_arr2.size
Out[98]: 200

In [99]: my_arr2.dtype
Out[99]: dtype('int32')

In [100]: my_arr2.itemsize
Out[100]: 4

这里对nbarray的元素类型进行一个补充:

 

上述几张图片引用自北京理工大学嵩天老师的ppt

注意:使用numpy.string_类型时,一定要小心,因为NumPy的字符串数据是大小固定的,发生截取时,不会发出警告。pandas提供了更多非数值数据的便利的处理方法。

 

除了np.array函数,书上还介绍了如下函数

 

 

1.先说一下ones和ones_like(zeros类似,empty),full后面也有补充

In [106]: np.ones(10)
Out[106]: array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])

In [107]: np.ones((2, 3))
Out[107]:
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

看一下他的参数

In [108]: help(np.ones)
Help on function ones in module numpy.core.numeric:

ones(shape, dtype=None, order='C')
    Return a new array of given shape and type, filled with ones.

    Parameters
    ----------
    shape : int or sequence of ints
        Shape of the new array, e.g., ``(2, 3)`` or ``2``.
    dtype : data-type, optional
        The desired data-type for the array, e.g., `numpy.int8`.  Default is
        `numpy.float64`.
    order : {'C', 'F'}, optional
        Whether to store multidimensional data in C- or Fortran-contiguous
        (row- or column-wise) order in memory.

 

多用用上面几个函数我们会发现,ndarray大多数函数创建的是float64类型的

In [109]: np.ones((2, 3)).dtype
Out[109]: dtype('float64')

 

如果我们想得到一个整数的化,可以这样

In [110]: np.ones((2, 3), dtype = int)
Out[110]:
array([[1, 1, 1],
       [1, 1, 1]])

 

也可以这样

In [125]: a = np.ones((2, 3))

In [126]: a.astype(np.int32)
Out[126]:
array([[1, 1, 1],
       [1, 1, 1]])

 

 

再总结下np.ones_like,其实类似

In [112]: np.ones_like(my_arr)
Out[112]: array([1, 1, 1, ..., 1, 1, 1])

 

补充full

In [115]: a = np.full((2, 2), 1)

其他类似于ones

 

2.再说一下eye和identity

eye可以创建单位矩阵,identity只能创建单位方阵

np.eye的k值可以调节,为1的对角线的位置偏离度,0居中,1向上偏离1,以此类推,-1向下偏离。

In [121]: np.eye(2, 3, dtype=int)
Out[121]:
array([[1, 0, 0],
       [0, 1, 0]])

In [122]: np.eye(2, 3, k=1,  dtype=int)
Out[122]:
array([[0, 1, 0],
       [0, 0, 1]])

identity类似

 

3.再补充几个创建的函数

 

 

函数 说明
np.linspace()  根据起止数据等间距地填充数据,形成数组
np.concatenate() 将两个或多个数组合并成一个新的数组

 

    Examples
    --------
    >>> np.linspace(2.0, 3.0, num=5)
    array([ 2.  ,  2.25,  2.5 ,  2.75,  3.  ])
    >>> np.linspace(2.0, 3.0, num=5, endpoint=False)
    array([ 2. ,  2.2,  2.4,  2.6,  2.8])
    >>> np.linspace(2.0, 3.0, num=5, retstep=True)
    (array([ 2.  ,  2.25,  2.5 ,  2.75,  3.  ]), 0.25)

我们可以看出,

第一个,第二个参数的作用分别为起始位置,终止位置, 且为[s, e]

第三个参数[num]表示分组的数量

第四个参数[endpoint]表示有木有e(end),是不是闭区间

第五个参数[retstep]如果为true,后面我们可以看到他的每次移动步数是多少

 

这里先做两个补充:

轴(axis): 保存数据的维度;秩(rank):轴的数量

>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
       [3, 4, 6]])

 

 

 

ndArray数组的修改(通过修改使维度变换)

 

.


方法 说明
.reshape(shape)  不改变数组元素,返回一个shape形状的数组,原数组不变
resize(shape)  与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2)  将数组n个维度中两个维度进行调换
.flatten()  对数组进行降维,返回折叠后的一维数组,原数组不变

 

In [140]: my_arr
Out[140]: array([     0,      1,      2, ..., 999997, 999998, 999999])

In [141]: my_arr.shape
Out[141]: (1000000,)

In [142]: my_arr.reshape(2, 500000)
Out[142]:
array([[     0,      1,      2, ..., 499997, 499998, 499999],
       [500000, 500001, 500002, ..., 999997, 999998, 999999]])

 In [143]: my_arr
 Out[143]: array([ 0, 1, 2, ..., 999997, 999998, 999999])

注意:改变的元素数量应该跟原来的一致

In [144]: my_arr.resize(2, 500000)

In [145]: my_arr
Out[145]:
array([[     0,      1,      2, ..., 499997, 499998, 499999],
       [500000, 500001, 500002, ..., 999997, 999998, 999999]])
In [146]: my_arr.flatten()
Out[146]: array([     0,      1,      2, ..., 999997, 999998, 999999])

In [147]: my_arr
Out[147]:
array([[     0,      1,      2, ..., 499997, 499998, 499999],
       [500000, 500001, 500002, ..., 999997, 999998, 999999]])

 

转载于:https://www.cnblogs.com/ducklu/p/9056242.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用python进行数据分析,学习笔记1(numpy) ndarray的创建与修改 的相关文章

随机推荐

  • 前端实战(一):锚点跳转与滚动条监听

    目录 开发环境 实现效果 技术要点及代码 一 querySelectorAll 方法 二 scrollIntoView 方法 实战核心代码 开发环境 在HBuilder X开发工具下通过CDN的方式引入vue2 0以及Element UI
  • C++使用string的大数运算(7)快速模幂

    本次项目目标 使用C 完成对于大数的相关运算 具体有加减乘除取模 项目要点 1 大数指的是远超long long int的数据 2 将大数用矩阵进行存储 并通过矩阵实现运算 3 本人采用字符串进行存储 应注意char的特点 比如 char
  • SpringCloud Config简介

    简介 Spring Cloud Config为分布式系统的外部配置提供服务端 server 和客户端 client 的支持 Config服务端提供了一个集中的地方来管理所有环境下各个应用的配置 Config客户端即普通的Spring应用 但
  • history命令查看操作时间

    export HISTTIMEFORMAT F T whoami 给history加上时间戳 展示 1013 2016 08 08 12 15 40 root y 1014 2016 08 08 12 15 41 root df 1015
  • LDO系列--LDO并联扩容

    1 不能简单并联 无法电流均衡 两个LDO的内部的带隙基准源 参考电压 FET的特性 以及误差放大器的噪声不同 如失调电压 实际LDO输出的目标电压依旧是有差异的 这就导致了 LDO High的目标输出电压高一些 5V 相反LDO Low的
  • define #使用

    include
  • 定制音库成本骤降98%,PaddleSpeech小样本语音合成方案重磅来袭!

    随着以语音为交互渠道的产业不断升级 企业对语音合成有着越来越多的需求 比如智能语音助手 手机地图导航 有声书播报等场景都需要用到语音合成技术 通过语音合成技术想要得到一个新的音色 需要定制音库 但是定制音库所耗费的人力成本和时间成本巨大 成
  • (字符串)寻找字符串连续最多出现的字符以及出现的次数

    function maxLength str var arr str split var max item count 1 var count 1 for var i 1 i
  • [工业互联-12]:主流的工业以太网技术简介(PROFINET、POWERLINK、ETHERNET/IP、ETHERCAT、SERCOSIII、MODBUS TCP、CC-LINK IE)

    目录 前言 1 工业通信要求 1 1 工业通信网络分层模型 1 2 工业控制的实时性要求 2 以太网技术 2 1 协议分层 2 2 实时应用 3 常见工业以太网技术 3 1 PROFINET通信 3 2 POWERLINK通信 3 3 Et
  • MySQL安装及初始密码设置

    运行mysql help grep my cnf查看my cnf配置位置的读取顺序 etc my cnf不存在 则我们需要在etc下创建my cnf配置文件 mysql会优先度读取 ps ef grep mysqld mysql不要随意修改
  • 类中的静态常量

    关于类中静态常量的声明和定义 class Test public static const int const value 1 static const int const value 1为类中的声明式 而非定义式 定义与声明 定义即为一个
  • 多CPU与单CPU的spin_lock使用上的区别

    这样 考虑这四个方面的因素 通过判断我们要互斥的数据会被这四个因素中 的哪几个来存取 就可以决定具体使用哪种形式的spinlock 如果只要和其他CPU 互斥 就要用spin lock spin unlock 如果要和irq及其他CPU互斥
  • 从性能考虑web的应用设计

    Author skate Time 2010 5 21 从性能考虑web的应用设计 最近看了一些性能优化的资料 根据我们自身系统的特点谈谈想法 希望对大家有帮助 1 适当的放弃一致性说 这里的一致性不仅指数据的一致性 还广泛指集中的紧耦合的
  • Linux rpm 命令 【转】

    文章来源 Linux下面使用rpm命令 RPM是RedHat Package Manager RedHat软件包管理工具 类似Windows里面的 添加 删除程序 rpm 执行安装包 二进制包 Binary 以及源代码包 Source 两种
  • visual studio 2017 报错 无法下载安装文件。请检查Internet连接,然后重试

    vs下载完离线安装包在无网络环境下点击安装时出现无法下载安装文件 请检查Internet连接 然后重试 原因是证书没有导 解决方法 打开刚刚存放离线文件的路径 比如D vs2017offline 然后找到certificates文件夹并打开
  • SpringBoot对接支付宝当面付和手机网站支付

    一 前期准备 1 注册商家账号 支付宝 2 登录进入 在产品中心选择自己所需要对接的功能 3 进入对接功能 选择立即开通 4 填写商户信息 5 开通成功之后 产品中心 gt gt 开发设置 gt gt 创建应用并关联 进行应用创建 6 应用
  • Kubernetes 弹性伸缩全场景解析(三) - HPA 实践手册

    在上一篇文章中 给大家介绍和剖析了 HPA 的实现原理以及演进的思路与历程 本文我们将会为大家讲解如何使用 HPA 以及一些需要注意的细节 autoscaling v1 实践 v1 的模板可能是大家平时见到最多的也是最简单的 v1 版本的
  • 【Audio音频兴趣拓展】Pop音的几种原因及解决方案

    1 硬件贴片错误可能会导致pop音 比如两个输入电容的容值相差过大 一个33nf 一个1uf 这时在播放音乐的开始阶段可能会发生POP音 2 时序控制不合理也会导致POP音 正确的时序应该为 开启时 先开启BB音源 delay 20 30m
  • idea之热部署插件jrebel的使用

    背景 一个java web项目 在写的过程中我们需要不断调试 如果没有热部署 则我们每修改一次项目要重启一次 验证问题有没有得到解决 如果项目很小 启动只要几秒或十几秒 可能感觉影响不是很大 但当项目变大了 重启一次需要几十秒 几分钟 甚至
  • 利用python进行数据分析,学习笔记1(numpy) ndarray的创建与修改

    我是通过学习mooc上嵩天老师的数据分析与展示和阅读 利用python进行数据分析 做出的笔记 import numpy as np 为了缩小代码量 公认约定使用np作为numpy from numpy import 往往实不可取的 因为它