python数据分析之--numpy库

本文深入讲解了NumPy库的基本用法,包括数组的创建、属性、类型转换、重塑与合并、随机数生成、索引切片、数组运算、条件逻辑运算、统计运算、布尔型数组运算、排序、数组存取、线性代数及图像处理等内容,全面覆盖了NumPy在数据分析领域的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

numpy库是数据分析的基础包,提供高性能的数组与矩阵运算处理能力;
优点:
1.Numpy的强大之处-向量化操作;
2.NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵;
3.Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix));
4.ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快;


# 一:创建数组

In [1 ]:

import numpy as np

data1 = [5, 7, 9, 20]   #列表

arr1 = np.array(data1)arr1

In [3]:

data2 = (5, 7, 9, 20) #元组

arr2 = np.array(data2)
arr2

Out[3]:

array([ 5,  7,  9, 20])

In [4]:

 

data3 = [[1, 2, 3, 4],[5, 6, 7, 8]]   #多维数组
arr3 = np.array(data3)
arr3

Out[4]:

array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

In [5]:

 

arr3.shape  #查看组的维度 两行四列

Out[5]:

(2, 4)

In [6]:

 

arr3.dtype  #查看数据类型

Out[6]:

dtype('int32')

In [7]:

 

data4 = [1.2, 2, 3.45, 5]
arr4 = np.array(data4)
arr4

Out[7]:

array([ 1.2 ,  2.  ,  3.45,  5.  ])

In [8]:

 

arr4.dtype

Out[8]:

dtype('float64')

In [9]:

 

np.zeros(8)  #通过zeros()方法创建全为零的数组

Out[9]:

array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

In [10]:

 

np.zeros((3,4))

Out[10]:

array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])

In [11]:

 

np.ones(4) #通过ones()方法创建全为1的数组

Out[11]:

array([ 1.,  1.,  1.,  1.])

In [12]:

 

np.ones((4,6))

Out[12]:

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.]])

In [13]:

 

np.empty((2, 2, 2)) #创建没有具体值的数组(即为垃圾值的数组)

Out[13]:

array([[[  8.25089629e-322,   2.39127773e-321],
        [  2.47032823e-323,   3.90344271e-316]],

       [[  0.00000000e+000,   2.47032823e-323],
        [  3.90350911e-316,   0.00000000e+000]]])

In [14]:

 

np.arange(10) #arange()函数用于创建数组

Out[14]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [15]:

 

arr3

Out[15]:

array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

In [17]:

 

arr5 = np.ones_like(arr3)#通过ones_like()方法中传入的数组形式创建全为1的数组
arr5

Out[17]:

array([[1, 1, 1, 1],
       [1, 1, 1, 1]])

In [18]:

 

arr5.dtype

Out[18]:

dtype('int32')

In [19]:

 

data = [[2, 4, 5],[3,5, 7]]
arr = np.array(data)
arr

Out[19]:

array([[2, 4, 5],
       [3, 5, 7]])

 

# 二:数组的属性:

In [20]:

 

arr.ndim #.ndim为秩即数据轴的个数

Out[20]:

2

In [21]:

 

arr.size #.元素的总个数

Out[21]:

6

In [22]:

 

arr.itemsize #数组中每个元素的字节大小

Out[22]:

4

In [23]:

 

arr.dtype #数据类型

Out[23]:

dtype('int32')

 

 
# 三:数组类型与变换

In [26]:

 

arr1 = np.arange(5)
arr1

Out[26]:

array([0, 1, 2, 3, 4])

In [27]:

 

arr1.dtype

Out[27]:

dtype('int32')

In [28]:

 

arr2 = np.arange(5,dtype='float64')#数据类型强制定义
arr2

Out[28]:

array([ 0.,  1.,  2.,  3.,  4.])

In [29]:

 

arr2.dtype

Out[29]:

dtype('float64')

In [31]:

 

arr1 = np.arange(6)
arr1

Out[31]:

array([0, 1, 2, 3, 4, 5])

In [32]:

 

arr1.dtype

Out[32]:

dtype('int32')

In [33]:

 

arr2 = arr1.astype(np.float64)#astype()方法,数据类型强制转换
arr2

Out[33]:

array([ 0.,  1.,  2.,  3.,  4.,  5.])

In [34]:

 

arr2.dtype

Out[34]:

dtype('float64')

In [35]:

 

arr3 = arr1.astype('string_')#astype()方法,数据类型强制转为字符串
arr3

Out[35]:

array([b'0', b'1', b'2', b'3', b'4', b'5'],
      dtype='|S11')

In [36]:

 

arr3.dtype

Out[36]:

dtype('S11')

In [38]:

 

arr = np.array([2.3, 7.5, 5.6, 9.8])
arr

Out[38]:

array([ 2.3,  7.5,  5.6,  9.8])

In [39]:

 

arr.astype('int32')

Out[39]:

array([2, 7, 5, 9])

In [40]:

 

arr3

Out[40]:

array([b'0', b'1', b'2', b'3', b'4', b'5'],
      dtype='|S11')

In [42]:

 

arr3.astype(np.int32)

Out[42]:

array([0, 1, 2, 3, 4, 5])

In [43]:

 

arr = np.array(['2', 'hello'])
arr

Out[43]:

array(['2', 'hello'],
      dtype='<U5')

In [44]:

 

arr.astype('int32')#字符串转int类型报错
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-44-849446cb6004> in <module>()
----> 1 arr.astype('int32')

ValueError: invalid literal for int() with base 10: 'hello'

In [45]:

 

arr1 = np.arange(10)
arr1.dtype

Out[45]:

dtype('int32')

In [46]:

 

arr2 = np.ones(5)
arr2.dtype

Out[46]:

dtype('float64')

In [47]:

 

arr3 = arr1.astype(arr2.dtype)
arr3.dtype

Out[47]:

dtype('float64')

In [48]:

 

arr = np.arange(3)
arr.dtype

Out[48]:

dtype('int32')

In [49]:

 

arr.astype('float64')

Out[49]:

array([ 0.,  1.,  2.])

In [50]:

 

arr

Out[50]:

array([0, 1, 2])

 

 
# 四.数据重塑合并

In [51]:

 

arr = np.arange(9)
arr

Out[51]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8])

In [52]:

 

arr.reshape((3,3))#通过reshape()方法改变其数组维度,传入的参数为新维度的元组

Out[52]:

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [54]:

 

arr = np.array([[3, 4, 5],[1, 2, 3]])
arr.reshape((3,2))

Out[54]:

array([[3, 4],
       [5, 1],
       [2, 3]])

In [55]:

 

arr = np.arange(12)
arr.reshape((3,-1))#参数为-1表示数组的维度可以通过数据本身来判断

Out[55]:

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

In [57]:

 

arr = np.arange(10).reshape((5,2))
arr

Out[57]:

array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])

In [58]:

 

arr.ravel()#ravel()方法和reshape()方法相反,即将数据散开

Out[58]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [59]:

 

arr

Out[59]:

array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])

In [60]:

 

arr.flatten()#flatten()方法将数据扁平化

Out[60]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [61]:

 

arr

Out[61]:

array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])

In [62]:

 

arr1 = np.arange(12).reshape(3,4)
arr1

Out[62]:

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

In [70]:

 

arr2 = np.arange(12,24).reshape(3,4)
arr2

Out[70]:

array([[12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])

In [71]:

 

np.concatenate([arr1, arr2],axis=0)
#concatenate()方法将数组合并,指定轴方向

Out[71]:

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]])

In [72]:

 

np.concatenate([arr1, arr2],axis=1)

Out[72]:

array([[ 0,  1,  2,  3, 12, 13, 14, 15],
       [ 4,  5,  6,  7, 16, 17, 18, 19],
       [ 8,  9, 10, 11, 20, 21, 22, 23]])

In [73]:

 

np.vstack((arr1,arr2))#vstack()方法将数组合并

Out[73]:

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]])

In [74]:

 

np.hstack((arr1, arr2))#hstack()方法将数组合并

Out[74]:

array([[ 0,  1,  2,  3, 12, 13, 14, 15],
       [ 4,  5,  6,  7, 16, 17, 18, 19],
       [ 8,  9, 10, 11, 20, 21, 22, 23]])

In [76]:

 

arr = np.arange(12).reshape((6,2))
arr

Out[76]:

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

In [77]:

 

np.split(arr,[2, 4])#split()方法将数组拆分成多个数组

Out[77]:

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

In [78]:

 

arr = np.arange(12).reshape(3,4)
arr

Out[78]:

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

In [79]:

 

arr.transpose((1,0))
#transpose()方法或者利用属性T将数组转置;
#transpose()需要传入轴编号组成的元组;

Out[79]:

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

In [80]:

 

arr.T

Out[80]:

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

In [81]:

 

arr = np.arange(16).reshape((2, 2, 4))
arr

Out[81]:

array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

In [82]:

 

arr.swapaxes(1, 2)#ndarry的swapaxes()方法用于轴对换;

Out[82]:

array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])

 

 
# 五.随机数

In [85]:

 

arr = np.random.randint(100, 200, size=(5, 4))
arr
#np.random模块中利用randint()方法随机整数 5行4列

Out[85]:

array([[168, 180, 142, 134],
       [100, 106, 107, 147],
       [125, 170, 117, 192],
       [194, 172, 173, 102],
       [171, 171, 193, 180]])

In [87]:

 

arr = np.random.randn(2, 3, 5)
arr
#利用randn()方法产生随机数为平均值为0,标准差为1的正态分布随机数;

Out[87]:

array([[[-0.23022075, -1.53376604, -1.20506611, -0.72058013,  1.69808677],
        [-1.62102742, -1.1053548 ,  0.76182009, -1.24876097, -1.55001938],
        [ 0.04078704,  1.96669076, -2.24999391, -1.08302149,  0.52640131]],

       [[ 0.09381983,  1.16288913, -0.15885707,  0.93718335, -0.72444705],
        [-1.68017525, -0.18660456,  0.01881962,  0.16711124, -1.60857221],
        [ 0.93210884, -0.26899384, -0.35037258, -0.404521  ,  1.07034161]]])

In [88]:

 

arr = np.random.normal(4, 5, size=(3,5))
arr
#利用normal()函数可指定产生随机数的平均值和标准差的正态分布数组

Out[88]:

array([[  8.29188165,  -6.11855239,  -1.5724349 ,   6.97515202,
          3.83049015],
       [  2.23989149,   7.81287044, -10.01907046,   3.68896253,
          3.01140917],
       [ 10.68983039,   7.63279875,  10.70678635,   2.66406148,
          3.76512045]])

In [89]:

 

arr = np.random.randint(100, 200, size=(5, 4))
arr

Out[89]:

array([[147, 122, 130, 169],
       [151, 152, 117, 119],
       [129, 140, 111, 131],
       [197, 126, 176, 199],
       [128, 174, 117, 143]])

In [90]:

 

np.random.permutation(arr)#对序列排序

Out[90]:

array([[151, 152, 117, 119],
       [197, 126, 176, 199],
       [128, 174, 117, 143],
       [147, 122, 130, 169],
       [129, 140, 111, 131]])

In [91]:

 

arr

Out[91]:

array([[147, 122, 130, 169],
       [151, 152, 117, 119],
       [129, 140, 111, 131],
       [197, 126, 176, 199],
       [128, 174, 117, 143]])

In [92]:

 

arr = np.random.randint(100, 200, size=(5, 4))
arr

Out[92]:

array([[196, 140, 199, 182],
       [161, 109, 193, 176],
       [102, 138, 165, 166],
       [191, 181, 108, 113],
       [168, 102, 199, 150]])

In [93]:

 

np.random.shuffle(arr)#对序列排序

In [94]:

 

arr

Out[94]:

array([[168, 102, 199, 150],
       [191, 181, 108, 113],
       [102, 138, 165, 166],
       [161, 109, 193, 176],
       [196, 140, 199, 182]])

 

 
# 六.索引和切片

In [1]:

 

import numpy as np
#数组的切片和索引返回都是原始数组的使徒

In [15]:

 

arr = np.arange(10)
arr

Out[15]:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [16]:

 

arr[3]

Out[16]:

3

In [17]:

 

arr[-1]

Out[17]:

9

In [18]:

 

arr[2] = 123
arr

Out[18]:

array([  0,   1, 123,   3,   4,   5,   6,   7,   8,   9])

In [19]:

 

arr

Out[19]:

array([  0,   1, 123,   3,   4,   5,   6,   7,   8,   9])

In [20]:

 

arr[3] = 88
arr

Out[20]:

array([  0,   1, 123,  88,   4,   5,   6,   7,   8,   9])

In [22]:

 

arr1 = arr[-3:-1]
arr1

Out[22]:

array([7, 8])

In [23]:

 

arr1[:] = 77
arr

Out[23]:

array([  0,   1, 123,  88,   4,   5,   6,  77,  77,   9])

In [24]:

 

arr

Out[24]:

array([  0,   1, 123,  88,   4,   5,   6,  77,  77,   9])

In [26]:

 

arr1 = arr[1].copy()
arr1 = 34
arr

Out[26]:

array([  0,   1, 123,  88,   4,   5,   6,  77,  77,   9])

In [27]:

 

arr = np.arange(15).reshape(3,5)
arr

Out[27]:

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

In [28]:

 

arr[0]

Out[28]:

array([0, 1, 2, 3, 4])

In [29]:

 

arr[2]

Out[29]:

array([10, 11, 12, 13, 14])

In [30]:

 

arr

Out[30]:

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

In [31]:

 

arr[0][3]

Out[31]:

3

In [32]:

 

arr[2,3]  #两种方法等价

Out[32]:

13

In [33]:

 

arr = np.arange(12).reshape(2,2,3)
arr

Out[33]:

array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])

In [34]:

 

arr[0]

Out[34]:

array([[0, 1, 2],
       [3, 4, 5]])

In [35]:

 

old = arr[0].copy()
arr[0] = 12
arr

Out[35]:

array([[[12, 12, 12],
        [12, 12, 12]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])

In [36]:

 

arr[0] = old
arr

Out[36]:

array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])

In [37]:

 

arr

Out[37]:

array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]]])

In [38]:

 

arr[1, 1]

Out[38]:

array([ 9, 10, 11])

In [39]:

 

arr[0, 1, 2]

Out[39]:

5

In [40]:

 

arr = np.arange(6)
arr

Out[40]:

array([0, 1, 2, 3, 4, 5])

In [41]:

 

arr[2:5]

Out[41]:

array([2, 3, 4])

In [42]:

 

arr = np.arange(12).reshape(4,3)
arr

Out[42]:

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

In [44]:

 

arr[2:]

Out[44]:

array([[ 6,  7,  8],
       [ 9, 10, 11]])

In [45]:

 

arr

Out[45]:

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

In [46]:

 

arr[:, 1]

Out[46]:

array([ 1,  4,  7, 10])

In [47]:

 

arr[:, 1:2]

Out[47]:

array([[ 1],
       [ 4],
       [ 7],
       [10]])

In [49]:

 

arr[2:, 1:]#只有使用冒号才会选取整个轴,冒号在前为列轴,冒号再后为行轴;

Out[49]:

array([[ 7,  8],
       [10, 11]])

In [56]:

 

#布尔值索引;
fruits = np.array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'])
datas = np.random.randint(-1, 1, size=(7,5))

In [57]:

 

fruits

Out[57]:

array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'],
      dtype='<U6')

In [58]:

 

datas

Out[58]:

array([[ 0, -1,  0,  0, -1],
       [-1, -1,  0,  0, -1],
       [-1,  0, -1, -1,  0],
       [-1,  0,  0, -1,  0],
       [ 0,  0,  0,  0, -1],
       [-1, -1,  0,  0,  0],
       [ 0,  0, -1,  0, -1]])

In [59]:

 

fruits == 'pear'

Out[59]:

array([False, False,  True, False,  True, False,  True], dtype=bool)

In [60]:

 

datas[fruits == 'pear']

Out[60]:

array([[-1,  0, -1, -1,  0],
       [ 0,  0,  0,  0, -1],
       [ 0,  0, -1,  0, -1]])

In [61]:

 

datas[fruits != 'pear']

Out[61]:

array([[ 0, -1,  0,  0, -1],
       [-1, -1,  0,  0, -1],
       [-1,  0,  0, -1,  0],
       [-1, -1,  0,  0,  0]])

In [62]:

 

datas[(fruits == 'apple') | (fruits == 'banana')]

Out[62]:

array([[ 0, -1,  0,  0, -1],
       [-1, -1,  0,  0, -1],
       [-1,  0,  0, -1,  0],
       [-1, -1,  0,  0,  0]])

In [63]:

 

datas[fruits == 'pear',2:]

Out[63]:

array([[-1, -1,  0],
       [ 0,  0, -1],
       [-1,  0, -1]])

In [64]:

 

datas[fruits == 'pear',2]

Out[64]:

array([-1,  0, -1])

In [66]:

 

datas[datas == 0] = 1
datas

Out[66]:

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]])

In [67]:

 

arr = np.arange(12).reshape(4,3)
arr

Out[67]:

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

In [68]:

 

arr[[1, 3, 2]]#花式索引;

Out[68]:

array([[ 3,  4,  5],
       [ 9, 10, 11],
       [ 6,  7,  8]])

In [70]:

 

arr[[3, 2]][:, [2, 1]]

Out[70]:

array([[11, 10],
       [ 8,  7]])

In [71]:

 

arr[np.ix_([3,2],[2, 1])]#np.ix_()函数同样使用;

Out[71]:

array([[11, 10],
       [ 8,  7]])

 

 
# 七.数组运算

In [72]:

 

a = [1, 2, 3]
b = []
for i in a:
    b.append(i * 10)
b

Out[72]:

[10, 20, 30]

In [73]:

 

arr = np.array([1, 2, 3])
arr * 10

Out[73]:

array([10, 20, 30])

In [74]:

 

arr * arr

Out[74]:

array([1, 4, 9])

In [75]:

 

arr - arr

Out[75]:

array([0, 0, 0])

In [77]:

 

arr = np.random.randn(3,3)
arr

Out[77]:

array([[-1.30289625, -1.62082859, -0.02086977],
       [ 0.61681656,  1.44215576,  1.7281482 ],
       [-0.96761142,  0.6475979 , -0.57524988]])

In [78]:

 

np.abs(arr)

Out[78]:

array([[ 1.30289625,  1.62082859,  0.02086977],
       [ 0.61681656,  1.44215576,  1.7281482 ],
       [ 0.96761142,  0.6475979 ,  0.57524988]])

In [79]:

 

np.square(arr)#函数求平方

Out[79]:

array([[  1.69753863e+00,   2.62708531e+00,   4.35547217e-04],
       [  3.80462668e-01,   2.07981323e+00,   2.98649619e+00],
       [  9.36271853e-01,   4.19383043e-01,   3.30912420e-01]])

In [82]:

 

arr1 = np.random.randint(1, 10, size=(5))
arr1

Out[82]:

array([5, 2, 9, 4, 1])

In [83]:

 

arr2 = np.random.randint(1, 10, size=(5))
arr2

Out[83]:

array([7, 6, 9, 1, 3])

In [84]:

 

np.add(arr1, arr2)

Out[84]:

array([12,  8, 18,  5,  4])

In [85]:

 

np.minimum(arr1, arr2)#minimum函数用于计算元素最小值;

Out[85]:

array([5, 2, 9, 1, 1])

In [86]:

 

arr = np.random.normal(2,4,size=(6,))
arr

Out[86]:

array([ 4.03156633,  2.24471147, -1.05295999,  3.17361538,  9.45900887,
        2.48014303])

In [87]:

 

np.modf(arr)#modf()函数可返回两个数组,最小值和整数部分;

Out[87]:

(array([ 0.03156633,  0.24471147, -0.05295999,  0.17361538,  0.45900887,
         0.48014303]), array([ 4.,  2., -1.,  3.,  9.,  2.]))

 

 
# 八.条件逻辑运算

In [88]:

 

arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])
cond = np.array([True, False, False, True])

In [89]:

 

result = [(x if c else y) for x, y, c in zip(arr1, arr2, cond)]
result

Out[89]:

[1, 6, 7, 4]

In [91]:

 

result = np.where(cond, arr1, arr2)
result

Out[91]:

array([1, 6, 7, 4])

In [93]:

 

arr = np.random.randn(4, 4)
arr

Out[93]:

array([[ 0.99483299, -0.42559031,  0.60728194, -0.28477079],
       [-0.47341549, -1.03284446, -1.24692688, -0.7168212 ],
       [-0.2463296 ,  0.9006737 , -0.8362647 ,  0.28860023],
       [ 0.24025673, -1.14644973,  0.84133157, -0.00742223]])

In [94]:

 

new_arr = np.where(arr > 0, 1, -1)
new_arr

Out[94]:

array([[ 1, -1,  1, -1],
       [-1, -1, -1, -1],
       [-1,  1, -1,  1],
       [ 1, -1,  1, -1]])

In [115]:

 

arr = np.random.randint(1, 300, size=(3,3))
arr

Out[115]:

array([[177, 177,  99],
       [238, 233, 131],
       [125, 288,   5]])

In [116]:

 

new_arr = np.where(arr > 200, 3,
                   np.where(arr > 100, 2, 1))
new_arr

Out[116]:

array([[2, 2, 1],
       [3, 3, 2],
       [2, 3, 1]])

 

 
# 九.统计运算

In [121]:

 

arr = np.random.randn(4, 4)
arr

Out[121]:

array([[-0.2460958 , -3.56262609,  2.28878812, -0.66155659],
       [-0.32224876, -0.62264566,  0.0759868 , -0.50014849],
       [ 0.38841614,  0.2260369 , -0.61771424,  0.00538855],
       [-0.29865896,  0.51231692,  0.48119231,  0.06256321]])

In [122]:

 

arr.sum()#求和

Out[122]:

-2.791005624657537

In [123]:

 

arr.mean()#算术平均数

Out[123]:

-0.17443785154109606

In [124]:

 

arr.std()#std()函数可计算标准差,var()函数可计算方差;

Out[124]:

1.1141240674492316

In [125]:

 

arr

Out[125]:

array([[-0.2460958 , -3.56262609,  2.28878812, -0.66155659],
       [-0.32224876, -0.62264566,  0.0759868 , -0.50014849],
       [ 0.38841614,  0.2260369 , -0.61771424,  0.00538855],
       [-0.29865896,  0.51231692,  0.48119231,  0.06256321]])

In [126]:

 

arr.mean()
#指定轴向求算术平均值
#axis=1,1代表行
#axis=0,0代表列

Out[126]:

array([ -5.45372587e-01,  -3.42264027e-01,   5.31836566e-04,
         1.89353371e-01])

In [127]:

 

arr.sum(0)#求和

Out[127]:

array([-0.47858738, -3.44691793,  2.228253  , -1.09375332])

In [128]:

 

arr = np.arange(9).reshape(3,3)
arr

Out[128]:

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [129]:

 

arr.cumsum(0)#所有元素的累计和

Out[129]:

array([[ 0,  1,  2],
       [ 3,  5,  7],
       [ 9, 12, 15]], dtype=int32)

In [130]:

 

arr.cumprod(1)#所有元素的累计积

Out[130]:

array([[  0,   0,   0],
       [  3,  12,  60],
       [  6,  42, 336]], dtype=int32)

 

 
# 十.布尔型数组运算

In [132]:

 

arr = np.random.randn(20)
arr

Out[132]:

array([ 0.64854453, -1.02444099,  1.18506546,  1.0588872 , -1.67297679,
        1.11245385, -1.47720606,  0.67531455,  0.10707936,  1.60181681,
       -0.09663766,  0.13821122,  2.08949018, -0.85208144, -1.01504574,
       -1.01749498,  0.42782922, -0.83512655,  0.20623175, -0.23411408])

In [133]:

 

(arr > 0).sum()

Out[133]:

11

In [134]:

 

arr = np.array([True, False, False, True])
arr

Out[134]:

array([ True, False, False,  True], dtype=bool)

In [135]:

 

arr.any()#any()函数用于测试数组中是否存在一个或多个True

Out[135]:

True

In [136]:

 

arr.all()#all()函数用于测试数组中是否所有值为True

Out[136]:

False

 

# 十一.排序

In [137]:

 

arr = np.random.randn(10)
arr

Out[137]:

array([-0.06763165,  0.70670621, -2.28090762,  0.61654106,  0.35562341,
        0.57962632,  0.09817634,  1.52590085,  0.24640778, -0.69223728])

In [139]:

 

arr.sort()#通过sort()函数排序
arr

Out[139]:

array([-2.28090762, -0.69223728, -0.06763165,  0.09817634,  0.24640778,
        0.35562341,  0.57962632,  0.61654106,  0.70670621,  1.52590085])

In [140]:

 

arr = np.random.randn(5,3)
arr

Out[140]:

array([[ 0.76464658,  1.03958729,  0.83151511],
       [ 1.63188956, -0.62708685,  0.05175314],
       [ 0.85665906, -0.24305887,  1.30020042],
       [ 2.00108815, -1.49244044, -0.06771401],
       [ 0.26482398, -1.42061605, -1.0372988 ]])

In [141]:

 

#对于多维数组可以指定轴方向排序
arr.sort(1)
arr

Out[141]:

array([[ 0.76464658,  0.83151511,  1.03958729],
       [-0.62708685,  0.05175314,  1.63188956],
       [-0.24305887,  0.85665906,  1.30020042],
       [-1.49244044, -0.06771401,  2.00108815],
       [-1.42061605, -1.0372988 ,  0.26482398]])

In [142]:

 

fruits = np.array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'])
fruits

Out[142]:

array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'],
      dtype='<U6')

In [144]:

 

np.unique(fruits)
#唯一值运算

Out[144]:

array(['apple', 'banana', 'pear'],
      dtype='<U6')

In [145]:

 

arr = np.array([2, 3, 3, 2, 8, 1])
arr

Out[145]:

array([2, 3, 3, 2, 8, 1])

In [146]:

 

np.unique(arr)

Out[146]:

array([1, 2, 3, 8])

In [147]:

 

arr = np.array([2, 3, 5, 7])
arr

Out[147]:

array([2, 3, 5, 7])

In [148]:

 

np.in1d(arr, [2,7])#np.inld()函数用于测试机几个数组是否包含相同的值;

Out[148]:

array([ True, False, False,  True], dtype=bool)

 

 
# 十二.数组的存取;

In [ ]:

 

 
arr = np.arange(12).reshape(4,3)
arr

In [152]:

 

np.savetxt('ch2ex1.csv', arr, fmt='%d',delimiter=',')#np.savetxt()对数据进行存储

In [153]:

 

!type ch2ex1.csv
0,1,2
3,4,5
6,7,8
9,10,11

In [155]:

 

arr = np.loadtxt('ch2ex1.csv', delimiter=',')#np.loadtxt对数据进行读取,并且加载到数组中;
arr

Out[155]:

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

 

 
# 十三.线性代数;

In [156]:

 

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

Out[156]:

array([[1, 2, 3],
       [4, 5, 6]])

In [157]:

 

arr2 = np.arange(9).reshape(3,3)
arr2

Out[157]:

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [159]:

 

np.dot(arr1,arr2)#np.dot()矩阵乘法的dot函数;

Out[159]:

array([[24, 30, 36],
       [51, 66, 81]])

In [160]:

 

from numpy.linalg import det

In [161]:

 

arr = np.array([[1, 2], [3, 4]])
arr

Out[161]:

array([[1, 2],
       [3, 4]])

In [162]:

 

det(arr)

Out[162]:

-2.0000000000000004

 

# 图像处理

In [164]:

 

from PIL import Image
import numpy as np

In [165]:

 

im = np.array(Image.open('C:/Users/LP/Desktop/2.76.jpeg'))
print(im.shape,im.dtype)
(350, 583, 3) uint8

In [166]:

 

im

Out[166]:

array([[[226, 226, 226],
        [226, 226, 226],
        [226, 226, 226],
        ..., 
        [198, 198, 198],
        [197, 197, 197],
        [196, 196, 196]],

       [[226, 226, 226],
        [226, 226, 226],
        [226, 226, 226],
        ..., 
        [198, 198, 198],
        [197, 197, 197],
        [196, 196, 196]],

       [[226, 226, 226],
        [226, 226, 226],
        [226, 226, 226],
        ..., 
        [198, 198, 198],
        [197, 197, 197],
        [195, 195, 195]],

       ..., 
       [[210, 210, 210],
        [211, 211, 211],
        [211, 211, 211],
        ..., 
        [122, 122, 122],
        [124, 124, 124],
        [125, 125, 125]],

       [[211, 211, 211],
        [211, 211, 211],
        [211, 211, 211],
        ..., 
        [120, 120, 120],
        [122, 122, 122],
        [124, 124, 124]],

       [[211, 211, 211],
        [211, 211, 211],
        [212, 212, 212],
        ..., 
        [119, 119, 119],
        [121, 121, 121],
        [123, 123, 123]]], dtype=uint8)

In [170]:

 

b = [255, 255, 255] - im    #数组运算
new_im = Image.fromarray(b.astype('uint8'))  
new_im.save('C:/Users/LP/Desktop/2.79.jpeg')  #保存为新图像

In [172]:

 

b

Out[172]:

array([[[ 29,  29,  29],
        [ 29,  29,  29],
        [ 29,  29,  29],
        ..., 
        [ 57,  57,  57],
        [ 58,  58,  58],
        [ 59,  59,  59]],

       [[ 29,  29,  29],
        [ 29,  29,  29],
        [ 29,  29,  29],
        ..., 
        [ 57,  57,  57],
        [ 58,  58,  58],
        [ 59,  59,  59]],

       [[ 29,  29,  29],
        [ 29,  29,  29],
        [ 29,  29,  29],
        ..., 
        [ 57,  57,  57],
        [ 58,  58,  58],
        [ 60,  60,  60]],

       ..., 
       [[ 45,  45,  45],
        [ 44,  44,  44],
        [ 44,  44,  44],
        ..., 
        [133, 133, 133],
        [131, 131, 131],
        [130, 130, 130]],

       [[ 44,  44,  44],
        [ 44,  44,  44],
        [ 44,  44,  44],
        ..., 
        [135, 135, 135],
        [133, 133, 133],
        [131, 131, 131]],

       [[ 44,  44,  44],
        [ 44,  44,  44],
        [ 43,  43,  43],
        ..., 
        [136, 136, 136],
        [134, 134, 134],
        [132, 132, 132]]])

In [ ]:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值