Numpy使用2

上一个博客写到了numpy的特性,如何安装以及功能初探。这一篇就讲讲numpy的常用功能以及与其它python库的结合使用。

假设你已经成功执行下列语句:

import numpy as np

初始化

(1)直接创建

## 创建一维数组
In [8]: test_list = [1,3,5,6,7]

In [9]: array_numpy = np.array(test_list)

In [10]: array_numpy
Out[10]: array([1, 3, 5, 6, 7])

## 创建多维数组
In [16]: test_n_list = [[1,2,3], [4,5,6]]

In [17]: array_n_numpy = np.array(test_n_list)

In [18]: array_n_numpy
Out[18]: 
array([[1, 2, 3],
       [4, 5, 6]])

In [19]: 

(2)读图创建

假设现在目录下有个test.jpg图片,可以读图进行初始化

In [19]: from PIL import Image

In [20]: im = Image.open('test.jpg')  # 读入图片

In [21]: im.show()  # 显示图片

In [22]: print im.mode, im.size, im.format  # 打印图片的相关信息
RGB (1920, 1200) JPEG  # RGB图像

In [23]: im_numpy = np.asarray(im) # 把读入的图片作为矩阵

In [24]: im_numpy.shape  # 图片矩阵的shape信息
Out[24]: (1200, 1920, 3)  # 三维矩阵,每个分量是原始图片的R、G、B信息

(3)使用内置函数创建

In [25]: array_n_dim = np.ones((3,4,4), dtype='int8')  # 创建全1的矩阵

In [26]: array_n_dim
Out[26]: 
array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]], dtype=int8)

In [27]: array_n_dim.shape
Out[27]: (3, 4, 4)  # 三维矩阵,每个维度大小是4*4的

相关信息

(1)数据类型(dtype)

可以在创建矩阵的时候指定数据类型,像上面的例子那样,也可以之后进行转换

In [28]: array_n_numpy
Out[28]: 
array([[1, 2, 3],
       [4, 5, 6]])

In [29]: array_n_numpy.dtype
Out[29]: dtype('int64')  # 现在的数据类型是int64

In [30]: array_n_numpy.astype(np.float32)  # 显式的转化为float32
Out[30]: 
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.]], dtype=float32)

################# 如果每个字符串数组表示的全部是数字,可以这样将其转化为数字数组

In [31]: string_list = np.array(['1.2', '3', '4.67'], dtype= np.string_)

In [32]: string_list  # 字符串数组
Out[32]: 
array(['1.2', '3', '4.67'], 
      dtype='|S4')

In [33]: string_list.astype(float) # numpy自动转换为float合适的表示,对于此例是float64
Out[33]: array([ 1.2 ,  3.  ,  4.67])

In [34]: string_list.astype(float).dtype
Out[34]: dtype('float64')

(2)shape/reshape

shape显示numpy矩阵的维度,reshape可以转换矩阵的维度

In [37]: test_shape = np.arange(10)

In [38]: test_shape
Out[38]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [39]: test_shape.shape  # 显示shape信息
Out[39]: (10,)

In [40]: test_reshape = test_shape.reshape((2, 5))

In [41]: test_reshape
Out[41]: 
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

In [43]: test_reshape.shape
Out[43]: (2, 5)  # 现在的shape是(2,5)

到此numpy基本的信息已经介绍了,下篇继续写numpy的其它特性

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WD学习记录

Python数据结构与算法笔记(3)

递归是一种解决问题的方法,将问题分解为更小的子问题,直到得到一个足够小的问题可以被很简单地解决,通常递归设计函数调用自身。递归允许我们编写优雅的解决方案,解决可...

881
来自专栏xingoo, 一个梦想做发明家的程序员

快速排序

算法思想:对于输入的子数组a[p:r],按下面三个步骤: 1 分解:以a[p]为基准元素将a[p:r]分成三段,a[p:q-1],a[q],a[q+1:r],使...

1939
来自专栏desperate633

LintCode 完美平方题目分析代码

给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, ... )使得他们的和等于 n。你需要让平方数的个数最少。

632
来自专栏用户画像

4.2.2 常见的数据寻址方式

如单地址的指令格式,就不是明显地在地址字段中指出第二操作数的地址,而是规定累加器ACC作为第二操作数,指令格式明显指出的仅是第一操作数的地址。因此,累加器ACC...

622
来自专栏和蔼的张星的图像处理专栏

365. 二进制中有多少个1

思路一:遍历每一位,如果是1,计数器加1即可,也是最容易想到的,需要遍历一次,可以用不断除2来做,也可以用位操作,后者更简单些:

732
来自专栏数据结构与算法

HDU5972Regular Number(ShiftAnd算法 bitset)

接下来\(n\)行,每行开头有一个整数\(num\)表示匹配串中该位置的字符可以在\(num\)个桅子花出现,接下来输入这\(num\)个位置

781
来自专栏Crossin的编程教室

【Python 第18课】 bool类型转换

昨天最后留的几句关于bool类型的转换,其中有一行: bool('False') print一下结果,会发现是True。这是什么原因? 因为在pytho...

2254
来自专栏C语言及其他语言

[每日一题]IP判断

今天介绍的这题难度不大,和前面的弟弟的作业有异曲同工之妙 题目描述 在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。 合法的IP...

3055
来自专栏一名叫大蕉的程序员

大数据计数原理1+0=1这你都不会算(四)No.52

这是本坑的第四篇,之前已经说了关于 HashSet 、BitMap 、Bloom Filter 布隆过滤器了,本篇主要讲B-树。要是还不知道前面讲了啥的,可以点...

1817
来自专栏苦逼的码农

每日一题1:回文整数

分析:有人可能会把它转化为字符串,然后在来逐一比较,显然这在处理速度上是比较慢的。下面是我推荐的两种做法:

763

扫码关注云+社区