Python之numpy的ndarray数组使用方法介绍

NumPy介绍

NumPy的全名为Numeric Python,是一个开源的Python科学计算库,它包括:

(1)一个强大的N维数组对象ndrray;

(2)比较成熟的(广播)函数库;

(3)用于整合C/C++和Fortran代码的工具包;

(4)实用的线性代数、傅里叶变换和随机数生成函数

主要优点:

1.NumPy数组在数值运算方面的效率优于Python提供的list容器。

2.使用NumPy可以在代码中省去很多循环语句,因此其代码比等价的Python代码更为简洁。

ndarray常用属性介绍

ndarray常用创建方法

这里只介绍最常用的方法,从python的list或者tuple中转化成ndarray,关于empty, emptylike, zeros, zeroslike, ones, oneslike, full, fulllike 这些方法,请参考官网文档。

def test1():
    # 通过python的list来构建numpy array
    list1 = [[1, 2, 3]]
    list2 = [[1], [2], [3]]

    # 通过python的 tuple来构造
    tuple3= [(1,2,3)]

    # 使用array方法构造
    nd1 = np.array(list1)
    nd2 = np.array(list2)
    nd3 = np.array(tuple3)

    show_array_properties(nd1)
    show_array_properties(nd2)
    show_array_properties(nd3)





def show_array_properties(np_array):
    print("-----------------------")
    """
    常用属性介绍
    :param np_array: 
    :return: 
    """
    print(np_array.shape) # 代表每一个维度元素的个数
    print(np_array.ndim)  # 总共多少维度
    print(np_array.dtype) # 数据类型
    print(np_array.size) # 数组中元素的个数



test1()

`

输出结果:

-----------------------
(1, 3)
2
int32
3
-----------------------
(3, 1)
2
int32
3
-----------------------
(1, 3)
2
int32
3

`

ndarray常用数组操作

数组索引下标都是从0开始,不在特意强调

(1)常用步长访问

语法:start:stop:step (开始下标,停止下标,步长)

a = np.array([[1,2,3],[3,4,5],[4,5,6]])

print(a[0:3:2]) //start:stop:step

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

`

(2)使用arange生成数组,并访问元素

a = np.arange(10) 

print(a) # [0 1 2 3 4 5 6 7 8 9]

b = a[5] 
print b
// 5

b=np.arange(1,6,2) 

print(b) # [1 3 5]

`

(3)开始到结束

import numpy as np 
a = np.arange(10) 
print a[2:]
//output
[2  3  4  5  6  7  8  9]

`

(4)指定区间

import numpy as np 
a = np.arange(10) 
print a[2:5]
//output
[2  3  4]

`

(5)多维数组的范围访问

import numpy as np 
a = np.array([[1,2,3],[3,4,5],[4,5,6]]) 
print a[1:]

//output
[[3 4 5]
 [4 5 6]]

`

(6)多维数组的列访问

注意下面这种访问情况 冒号可以和三个点号相互替换

a = np.array([[1,2,3],[3,4,5],[4,5,6]]) 

print a[...,1]  ==> [2 4 5]  取第二列
等价
print a[:,1]  ==> [2 4 5]

print a[1,...]  ==> [3 4 5]  取第二行
print a[...,1:] ==> 取第一列之后的所有的列
//output 
[[2 3]
 [4 5]
 [5 6]]

`

(7)排序

a = np.array([[7,2,3],[3,4,5],[4,5,6]])
print(a[:,0]) 

# 取每个数组里面里面的第一个元素,排序,返回下标
np.argsort(a[:,0])  #升序
[7,3,4]

// np.argsort(-a[:,0]) #降序

#下面这个是按从小到大排序后的索引值
[1,2,0]

# 取出排序后的元数据

print(a[[1,2,0],:]) 等价 print(a[[1,2,0]])

结果:
[[3 4 5]
 [4 5 6]
 [7 2 3]]

#取a数组,前2个元素
print(a[:2,:]) 

#取a数组,2后面的元素
print(a[2:,:])

`

(8)reshape转化数组

list=[1,2,3,4,5,6,7,8]

array2d=np.array(list)

# 转成 4 行  2列  的 2维数组
print(array2d.reshape(4,2))

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

`

例子代码可到我github上下载:

https://github.com/qindongliang/opecv3-study

上面只是大概介绍了实际应用常用的一些方法,想要了解详细的朋友可以参考官网文档:

http://www.numpy.org/

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2018-05-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏贺贺的前端工程师之路

split的坑-字符串分割

昨天在调代码的时候,遇到了一个很大的坑儿,让我不得不记录下来,莫非是我写js代码太久了的缘故?大概也许可能吧...

23930
来自专栏Coding迪斯尼

Reactjs开发自制编程语言Monkey的编译器:语法解析

15720
来自专栏书山有路勤为径

复杂的链表的深度拷贝

Copy List with Random Pointer 已知一个复杂的链表,节点中有一个指向本链表任意某个节点的碎甲指针(也可以为空),求这个链表的深度拷...

7610
来自专栏Redis源码学习系列

Redis源码学习之压缩列表

压缩列表是列表对象、哈希对象和有序集合对象的底层实现之一。以列表对象为例,当列表节点都是比较小的整数或者比较短的字符串的时候,Redis就会选择压缩列表来做底层...

11100
来自专栏决胜机器学习

PHP数据结构(十七) ——内部排序综述

PHP数据结构(十七)——内部排序综述 (原创内容,转载请注明来源,谢谢) 一、稳定性 假设Ki=Kj(1<=i,j<=n,i!=j),且排在序列前的序列中R...

351120
来自专栏xx_Cc的学习总结专栏

iOS底层原理总结 - Category的本质

iOS底层原理总结 - Category的本质 面试题 Category的实现原理,以及Category为什么只能加方法不能加属性。 Category中有loa...

40660
来自专栏noteless

[三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符

计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。

47820
来自专栏老九学堂

C语言这个基础知识,99%的人都了解不全面

说明:这是学C语言最基本的知识点,简单的使用不难, 但是里面的一些细节和原理就值得我们好好推敲了,想要学好C语言或者编程语言的小伙伴,真的可以好好看看哦~

13800
来自专栏Jaycekon

深入浅出Redis-redis底层数据结构(下)

概述: 学习使用Redis,其实并不需要去研究其底层数据的实现。我们只需要了解他有哪些常用的数据类型,然后熟练使用,就可以很好的掌握Redis 这个工具了。但...

34860
来自专栏机器学习从入门到成神

字符串面试题(二)— 间隔字符串逆序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

18530

扫码关注云+社区

领取腾讯云代金券