numpy库中的函数1:

现从一张图片上去认识numpy

首先导入numpy 和 matplotlib.pylot

import numpy as np
# matplotlib画图的,也可以读取图片
import matplotlib.pyplot as plt

这里给一张cat.jpg的图片
numpy库中的函数1:_第1张图片

# 图片,音频都叫流(数据流)
# 用matplotlib中的pylot模块中的函数imread()读取图片
# 如果图片有颜色则是三维数组, 如果是黑白的都出来的是二维数组
cat = plt.imread('cat.jpg')
# display是jupyter中的一种打印方式
display(cat,cat.shape)

输出结果:cat 是一组三维数组,cat.shape输出(456, 730, 3),456表示图片的 宽, 730表示图片的长度, 3表示颜色

array([[[231, 186, 131],
        [232, 187, 132],
        [233, 188, 133],
        ...,
        [100,  54,  54],
        [ 92,  48,  47],
        [ 85,  43,  44]],

       [[232, 187, 132],
        [232, 187, 132],
        [233, 188, 133],
        ...,
        [100,  54,  54],
        [ 92,  48,  47],
        [ 84,  42,  43]],

       [[232, 187, 132],
        [233, 188, 133],
        [233, 188, 133],
        ...,
        [ 99,  53,  53],
        [ 91,  47,  46],
        [ 83,  41,  42]],

       ...,

       [[199, 119,  82],
        [199, 119,  82],
        [200, 120,  83],
        ...,
        [189,  99,  65],
        [187,  97,  63],
        [187,  97,  63]],

       [[199, 119,  82],
        [199, 119,  82],
        [199, 119,  82],
        ...,
        [188,  98,  64],
        [186,  96,  62],
        [188,  95,  62]],

       [[199, 119,  82],
        [199, 119,  82],
        [199, 119,  82],
        ...,
        [188,  98,  64],
        [188,  95,  62],
        [188,  95,  62]]], dtype=uint8)
(456, 730, 3)
# cat.shape输出(456, 730, 3),456表示图片的宽度, 730表示图片的长度, 3表示颜色
cat.shape
(456, 730, 3)
# 刚刚上面用imread方法得到一组数据流赋给变量cat
# 通过imshow()可以把该数据流还原成图片
plt.imshow(cat)

输出:

numpy库中的函数1:_第2张图片

#RGB  0  255
# cat是numpy.ndarray数组对象
type(cat)
numpy.ndarray
# 因为上读出的cat.jpg是三维数组, 这里创建一个随机的三位数组
# 它也是一张图片
im = np.random.randint(0,255,size=(456,730,3))
im = im.astype(np.float64)
plt.imshow(im)

numpy库中的函数1:_第3张图片

2 Numpy

numeric python 数字化的python

numpy中最重要的一个形式叫ndarray n 表示的是n个 d dimension 维度 array 数组

Python 本身支持的数值类型有 int(整型,python2 中存在 long 长整型)、float(浮点型)、bool(布尔型) 和 complex(复数型)。

而 Numpy 支持比 Python 本身更为丰富的数值类型,细分如下:

类型 描述 取值范围
bool 布尔类型, 1 个字节,值为 True 或 False。
int 整数类型, 通常为 int64 或 int32 。
intc 与 C 里的 int 相同, 通常为 int32 或 int64。
intp 用于索引, 通常为 int32 或 int64。
int8 与MySQL中tinyint 1字节 -2 ^7 ~ 2^7-1 (-128~127) 字节(从 -128 到 127)
int16 与MySQL中(smallint 2字节 -2 ^15 ~ 2^15-1 (-32768~32765)) 整数(从 -32768 到 32767)
int32 (int 4字节 -2 ^31~ 2^31-1 (-2147483648~2147483647)) 整数(从 -2147483648 到 2147483647)
int64 (bigint 8字节 -2 ^63 ~ 2^63-1) 整数(从 -9223372036854775808 到 9223372036854775807)
uint8 无符号整数 (从 0 到 255) unsigned
uint16 无符号整数 (从 0 到 65535)
uint32 无符号整数 (从 0 到 4294967295)
uint64 无符号整数 (从 0 到 18446744073709551615)
float float64 的简写。
float16 半精度浮点, 5 位指数,10 位尾数
float32 单精度浮点, 8 位指数,23 位尾数
float64 双精度浮点, 11 位指数,52 位尾数
complex complex128 的简写。
complex64 复数, 由两个 32 位浮点表示。
complex128 复数, 由两个 64 位浮点表示。

在 Numpy 中,上面提到的这些数值类型都被归于 dtype(data-type) 对象的实例。

我们可以用 numpy.dtype(object, align, copy) 来指定数值类型。而在数组里面,可以用 dtype= 参数。

2.1 Numpy 中,ndarray 类具有六个参数,它们分别为:

>>shape:数组的形状。

>>dtype:数据类型。

buffer:对象暴露缓冲区接口。

offset:数组数据的偏移量。

>>strides:数据步长。

order:{'C''F'},以行或列为主排列顺序。

下面,我们来了解创建 ndarray 的一些方法。在 numpy 中,我们主要通过以下 5 种途径创建数组,它们分别是:

nd1 = np.ndarray(shape=(5,4,3),dtype=np.int64)
type(nd1)
out:
 numpy.ndarray
1.从 Python 数组结构列表,元组等转换。
2.使用 np.arange、np.ones、np.zeros 等 numpy 原生方法。
3.从存储空间读取数组。
4.通过使用字符串或缓冲区从原始字节创建数组。
5.使用特殊函数,如 random。

2.2 从列表或元组转换

在 numpy 中,我们使用 numpy.array 将列表或元组转换为 ndarray 数组。其方法为:

numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0) 

其中,参数:

  • object:列表、元组等。
  • dtype:数据类型。如果未给出,则类型为被保存对象所需的最小类型。
  • copy:布尔来写,默认 True,表示复制对象。

下面,通过列表创建一个 ndarray 数组:

l = list('123456')
nd2=np.array(l)
type(nd2)
out:
    numpy.ndarray

2.3 arange 方法创建

除了直接使用 array 方法创建 ndarray,在 numpy 中还有一些方法可以创建一些有规律性的多维数。首先,我们来看一看 arange()。arange() 的功能是在给定区间内创建一系列均匀间隔的值。方法如下:

numpy.arange(start, stop, step, dtype=None)  

你需要先设置值所在的区间,这里为 `[开始, 停止),你应该能发现这是一个半开半闭区间。然后,在设置 step 步长用于设置值之间的间隔。最后的可选参数 dtype可以设置返回ndarray 的值类型。

举个例子:

# 生成一个一维数组从0开始到150, 步长为3
nd3=np.arange(0,150,step=5,dtype=np.float32)
display(nd3.shape,nd3.dtype)
out:    (30,)    dtype('float32')
nd3
out:
    array([  0.,   5.,  10.,  15.,  20.,  25.,  30.,  35.,  40.,  45.,  50.,
            55.,  60.,  65.,  70.,  75.,  80.,  85.,  90.,  95., 100., 105.,
           110., 115., 120., 125., 130., 135., 140., 145.], dtype=float32)

2.3 linspace 方法创建

linspace方法也可以像arange方法一样,创建数值有规律的数组。linspace用于在指定的区间内返回间隔均匀的值。其方法如下:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 
  • start:序列的起始值。
  • stop:序列的结束值。
  • num:生成的样本数。默认值为50。
  • endpoint:布尔值,如果为真,则最后一个样本包含在序列内。
  • retstep:布尔值,如果为真,返回间距。
  • dtype:数组的类型。

举个例子:

#全闭区间
nd4=np.linspace(0,150,num=151)
nd4.shape
(150,)
# 不使用dtype属性改变默认的数据类型
# 可以使用numpyd.astype(np.float32)
nd4.astype(np.int)
nd4
out:
 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, 100, 101, 102, 103,
           104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
           117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
           130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
           143, 144, 145, 146, 147, 148, 149, 150])

2.5.1 ones 方法创建

numpy.ones 用于快速创建数值全部为 1 的多维数组。其方法如下:

numpy.ones(shape, dtype=None, order='C')

其中:

  • shape:用于指定数组形状,例如(1, 2)或 3。
  • dtype:数据类型。
  • order{'C','F'},按行或列方式储存数组。

举个例子:

nd5=np.ones(shape=(456,730,3))
nd5.dtype
out:
    dtype('float64')
plt.imshow(nd5)
out:

numpy库中的函数1:_第4张图片

2.5.2 zeros 方法创建

zeros 方法和上面的 ones 方法非常相似,不同的地方在于,这里全部填充为 0。zeros 方法和 ones 是一致的。

numpy.zeros(shape, dtype=None, order='C')

其中:

  • shape:用于指定数组形状,例如(1, 2)3
  • dtype:数据类型。
  • order{'C','F'},按行或列方式储存数组。

举个例子:

nd6 = np.zeros(shape=(456,730,3))
nd6.dtype
out:
    dtype('float64')
#jpg  rgb   (0-255)
#png   rgb  (0-1)
plt.imshow(nd6)
out:

numpy库中的函数1:_第5张图片

2.6.1full方法创建

numpy.full用于创建一个自定义形状的数组,可以自己指定一个值,该值填满整个矩阵。

numpy.full(shape,fill_value=num)

其中:

  • shape:用于指定数组形状,例如(1, 2)3

  • fill_value:用于指定填充的数字(如果num是浮点数则默认类型是float64, 如果是整数则是int类型)
    结果:

nd7 = np.full(shape=(456,730,3),fill_value=125.0)
nd7.dtype
out:
    dtype('float64')
plt.imshow(nd7)
out:

numpy库中的函数1:_第6张图片

2.6.2eye 方法创建

numpy.eye 用于创建一个二维数组,其特点是k 对角线上的值为 1,其余值全部为0。方法如下:

numpy.eye(N, M=None, k=0, dtype='float'>)  
# k表示从下标第几个开始

其中:

  • N:输出数组的行数。
  • M:输出数组的列数。
  • k:对角线索引:0(默认)是指主对角线,正值是指上对角线,负值是指下对角线。

举个例子:

nd8 = np.eye(5,5)
nd8
out:
    array([[1., 0., 0., 0., 0.],
           [0., 1., 0., 0., 0.],
           [0., 0., 1., 0., 0.],
           [0., 0., 0., 1., 0.],
           [0., 0., 0., 0., 1.]])

k = 1

nd8 = np.eye(5,5, k=1)
nd8
out:
array([[0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.],
       [0., 0., 0., 0., 0.]])

k = -1

nd8 = np.eye(5,5, k=-1)
nd8
out:
array([[0., 0., 0., 0., 0.],
       [1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.]])

你可能感兴趣的:(numpy,python)