Numpy關于數(shù)組的基本使用

附上參考鏈接
https://www.runoob.com/numpy/numpy-tutorial.html
https://www.cnblogs.com/TensorSense/p/6795995.html
https://docs.scipy.org/doc/numpy/
大數(shù)據(jù)挖掘常用的Python包
Numpy:科學計算包
Scipy:科學計算包
Pandas:數(shù)據(jù)分析處理包
Matplotlib:數(shù)據(jù)可視化庫
Scikit-learn:機器學習庫
這里只介紹numpy包

一、Numpy簡介

NumPy是一個開源的Python科學計算基礎庫,提供了大量的數(shù)值編程工具,可以方便地處理向量、矩陣等運算。它包含:

  • 一個強大的N維數(shù)組對象 ndarray
  • 廣播功能函數(shù)
  • 線性代數(shù)、傅里葉變換、隨機數(shù)生成等功能

NumPy是SciPy、Pandas等數(shù)據(jù)處理或科學計算庫的基礎

二、Numpy的基本操作
0. 導入Numpy

import numpy as np

1. 創(chuàng)建數(shù)組

  • (1)從Python中的列表、元組等類型創(chuàng)建nd-array數(shù)組
    利用
    ① 從列表創(chuàng)建數(shù)組
import numpy as np
li = [1,5,6,8]
x = np.array(li)
print(x)
print(type(x))

結果:
[1 5 6 8]
<class 'numpy.ndarray'>

② 從元組創(chuàng)建數(shù)組

import numpy as np
tup = (5,4,8,6)
x = np.array(tup)
print(x)
print(type(x))

結果:
[5 4 8 6]
<class 'numpy.ndarray'>

③ 從列表和元組混合創(chuàng)建數(shù)組

import numpy as np
li = [1,5,6,8]
tup = (5,4,8,6)
x = np.array([li,tup]) #實際上這里依舊是列表創(chuàng)建數(shù)組
print(x)
print(type(x))

結果:
[[1 5 6 8]
 [5 4 8 6]]
<class 'numpy.ndarray'>
  • (2)使用Numpy函數(shù)創(chuàng)建數(shù)組

① arange(n)
import numpy as np
x1 = np.arange(10)
x2 = np.arange(5)
x3 = np.arange(1,11,2)
print(x1)
print(x2)
print(x3)

結果:
[0 1 2 3 4 5 6 7 8 9]
[0, 1, 2, 3, 4]
[1, 3, 5, 7, 9]

arange()有三個主要參數(shù),start,stop,step,即起始、終止和步長。

② ones(shape)
參數(shù)shape指的是列表或者元組,數(shù)字個數(shù)指數(shù)組的維度,可以通過shape屬性查看數(shù)組的形狀。參數(shù)dtype是元素的類型有int,默認為float。

import numpy as np
x1 = np.ones(3) #一維數(shù)組
x2 = np.ones((2,3)) #二維數(shù)組
x3 = np.ones([2,3,4]) #三維數(shù)組

print(x1)
print()
print(x2)
print()
print(x3)
print(x1.shape)
print(x2.shape)
print(x3.shape)

結果:
[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.]]]

(3,)
(2, 3)
(2, 3, 4)

③ zeros(shape)
zeros與ones相似,只不過生成的元素是0.

import numpy as np
x1 = np.zeros(3) #一維數(shù)組
x2 = np.zeros((2,3)) #二維數(shù)組
x3 = np.zeros([2,3,4]) #三維數(shù)組

print(x1)
print()
print(x2)
print()
print(x3)

結果:
[0. 0. 0.]

[[0. 0. 0.]
 [0. 0. 0.]]

[[[0. 0. 0. 0.]
  [0. 0. 0. 0.]
  [0. 0. 0. 0.]]
 [[0. 0. 0. 0.]
  [0. 0. 0. 0.]
  [0. 0. 0. 0.]]]

④ full(shape,val)
用val填充一個shape形狀的數(shù)組

import numpy as np
x = np.full((2,3),2) #用2填充2*3的二維數(shù)組
print(x)

結果:
[[2 2 2]
 [2 2 2]]

⑤ eye(n)
生成一個n*n維的單位矩陣

import numpy as np
x = np.eye(3)
print(x)

結果:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
  • (3)利用其它函數(shù)創(chuàng)建nd-array數(shù)組

    ① linspace(start,stop,num,endpoint)


import numpy as np
x1 = np.linspace(1,10,3,dtype=int) # endpoint默認為True
print(x1)

x2 = np.linspace(1,10,3,dtype=int,endpoint=False)
print(x2)

結果:
[1 5 10]
[1 4 7]

② concatenate((a1,a2,...,an),aixs=0)
(a1,a2,...)是要連接的序列,aixs是行或者列,0是按列連接、1是按行連接,默認為0。
將兩個或多個數(shù)組合并成一個數(shù)組

import numpy as np
a = np.array([[4,1],[3,2]])
b = np.array([[5,2],[8,9]])
c1 = np.concatenate([a,b])
c2 = np.concatenate((a,b),1)
print(a)
print()
print(b)
print()
print(c1)
print()
print(c2)

結果:
[[4 1]
 [3 2]]

[[5 2]
 [8 9]]

[[4 1]
 [3 2]
 [5 2]
 [8 9]]

[[4 1 5 2]
 [3 2 8 9]]

③ hstack(tup)和vstack(tup)
tup是元組

import numpy as np
a = np.array([[5,4],[8,6],[8,7]])
b = np.array([[1,2],[4,5],[2,2]])
c1 = np.hstack((a,b))
c2 = np.vstack((a,b))

print(a)
print()
print(b)
print()
print(c1)
print()
print(c2)

結果:
[[5 4]
 [8 6]
 [8 7]]

[[1 2]
 [4 5]
 [2 2]]

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

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

2. 獲取數(shù)組屬性

數(shù)組屬性

import numpy as np
a = np.array([[2,1,3],[1,4,5],[8,5,5]])
print(a)
print("a.ndim:",a.ndim)
print("a.shape:",a.shape)
print("a.size:",a.size)
print('a.dtype:',a.dtype)
print('itemsize:',a.itemsize)

結果:
[[2 1 3]
 [1 4 5]
 [8 5 5]]
a.ndim: 2
a.shape: (3, 3)
a.size: 9
a.dtype: int32
itemsize: 4

3. 隨機生成、復制、排序、調整、轉置數(shù)組

① 隨機生成數(shù)組
有np.random.rand(),np.random.randn()兩種方式,區(qū)別在于rand()只生成正數(shù)。

import numpy as np
x1 = np.random.randn(2,3) #生成一個2x3的二維數(shù)組
x2 = np.random.randn(3,4) #生成一個3x4的二維數(shù)組
x3 = np.random.randn(2,2,3) #生成一個2x2x3的三維數(shù)組

print(x1)
print()
print(x2)
print()
print(x3)

結果:
[[ 0.6919357   0.39917593 -0.0896835 ]
 [ 0.61647791  0.85612186 -0.93986079]]

[[-0.1696892  -1.66241796 -1.24078019  1.02316869]
 [ 1.05928049 -0.42552907  0.40492102 -0.78794536]
 [ 0.78318229  0.75858729 -0.44156901 -1.58432534]]

[[[ 0.85747856  1.61558974 -0.46686676]
  [ 1.22798477  1.26865842 -0.18074301]]
 [[-1.99597649  0.40527899  1.86830874]
  [-0.5422555   0.83269358 -0.33257266]]]

② 復制數(shù)組
np.copy(arr)

import numpy as np
a = np.array([[1,2,4],[2,5,6]])
a_copy = np.copy(a)
print(a)
print()
print('復制',a_copy)

結果:
[[1 2 4]
 [2 5 6]]

復制 [[1 2 4]
 [2 5 6]]

③ 排序數(shù)組
np.sort(a,axis=1)
axis=0 按列排序,axis=1按行排序

import numpy as np
a = np.array([[1,5,3],[8,7,2]])
b = np.sort(a)
c = np.sort(a,axis=0)
print(a)
print()
print(b)
print()
print(c)

結果:
[[1 5 3]
 [8 7 2]]

[[1 3 5]
 [2 7 8]]

[[1 5 2]
 [8 7 3]]

④ 調整數(shù)組
reshape(arr,newshape),調整數(shù)組的形狀

import numpy as np
a = np.array([[1,5,3],[8,7,2]]) #這是一個2x3的二維數(shù)組
b = np.reshape(a,(3,2)) #調整為3x2的數(shù)組,但不能調整為2x4,4x2這樣子的
print(a)
print()
print(b)

resize(a,newshape),調整數(shù)組的大小,可以調整為更大的數(shù)組,如果新數(shù)組大小大于原始大小,則包含原始數(shù)組中的元素的副本。

import numpy as np
a = np.array([[1,5,3],[8,7,2]]) #這是一個2x3的二維數(shù)組
b = np.resize(a,(3,4)) #調整為一個3x4的二維數(shù)組
print(a)
print()
print(b)

結果:
[[1 5 3]
 [8 7 2]]

[[1 5 3 8]
 [7 2 1 5]
 [3 8 7 2]]

⑤ 轉置數(shù)組
arr.T

import numpy as np
a = np.array([[1,5,3],[8,7,2]]) #這是一個2x3的二維數(shù)組
aT = a.T
print(a)
print()
print(aT)

結果:
[[1 5 3]
 [8 7 2]]

[[1 8]
 [5 7]
 [3 2]]

4. 增加、刪除元素


① 添加元素
1)從結尾增加元素,append(arr,values)

import numpy as np
a = np.array([[1,5,3],[8,7,2]])
print("添加元素之前:")
print(a)
a = np.append(a,10)
print("添加元素之后,變成了一維數(shù)組:")
print(a)

結果:
添加元素之前:
[[1 5 3]
 [8 7 2]]
添加元素之后,變成了一維數(shù)組:
[ 1  5  3  8  7  2 10]

沿0軸添加元素

import numpy as np
a = np.array([[1,5,3],[8,7,2]])
print("添加之前")
print(a)
a = np.append(a,[[2,5,6]],axis=0)
print("沿0軸添加元素")
print(a)

結果:
添加之前
[[1 5 3]
 [8 7 2]]
沿0軸添加元素
[[1 5 3]
 [8 7 2]
 [2 5 6]]

沿1軸添加元素

import numpy as np
a = np.array([[1,5,3],[8,7,2]])
print("添加之前")
print(a)
#a = np.append(a,[[2,5,6]],axis=1)按1軸,必須兩個維度都要增加
a = np.append(a,[[2,5,6],[1,5,5]],axis=1)
print("沿1軸添加元素")
print(a)

結果:
添加之前
[[1 5 3]
 [8 7 2]]
沿1軸添加元素
[[1 5 3 2 5 6]
 [8 7 2 1 5 5]]

2)從指定位置增加元素,insert(arr,index,values)
普通插入

import numpy as np
a = np.arange(12).reshape(4,3)
print("添加之前")
print(a)
a = np.insert(a,2,[1,5,7])
print("在索引為2的元素之前插入,變?yōu)橐痪S數(shù)組:")
print(a)

結果:
添加之前
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
在索引為2的元素之前插入,變?yōu)橐痪S數(shù)組:
[ 0  1  1  5  7  2  3  4  5  6  7  8  9 10 11]

按行(0軸)索引插入

import numpy as np
a = np.arange(12).reshape(4,3)
print("添加之前")
print(a)
a = np.insert(a,2,[1,5,7],0)
print("按行索引插入,在行索引為2的行之前插入:")
print(a)

結果:
添加之前
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
按行索引插入,在行索引為2的行之前插入:
[[ 0  1  2]
 [ 3  4  5]
 [ 1  5  7]
 [ 6  7  8]
 [ 9 10 11]]

按列(1軸)索引插入

import numpy as np
a = np.arange(12).reshape(4,3)
print("添加之前")
print(a)
#a = np.insert(a,2,[1,5,7],1) 注意,按列來的話,有四個元素
a = np.insert(a,2,[1,5,7,4],1)
print("按列索引插入,在列索引為2的列之前插入:")
print(a)

結果:
添加之前
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
按列索引插入,在列索引為2的列之前插入:
[[ 0  1  1  2]
 [ 3  4  5  5]
 [ 6  7  7  8]
 [ 9 10  4 11]]

② 刪除元素
普通刪除,返回一維數(shù)組

import numpy as np
a = np.arange(10).reshape(5,2)
print("刪除之前:")
print(a)
a = np.delete(a,2)
print("刪除之后:")
print(a)

結果:
刪除之前:
[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]
刪除之后:
[0 1 3 4 5 6 7 8 9]

np.delete(arr,index,axis=0):刪除數(shù)組arr第index+1行所有的元素,返回ndarray對象

import numpy as np
a = np.arange(10).reshape(5,2)
print("刪除之前:")
print(a)
a = np.delete(a,2,axis=0)
print("刪除之后:")
print(a)

結果:
刪除之前:
[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]
刪除之后:
[[0 1]
 [2 3]
 [6 7]
 [8 9]]

np.delete(arr,index,axis=1):刪除數(shù)組arr第index+1列所有的元素,返回ndarray對象

import numpy as np
a = np.arange(10).reshape(2,5)
print("刪除之前:")
print(a)
a = np.delete(a,2,axis=1)
print("刪除之后:")
print(a)

結果:
刪除之前:
[[0 1 2 3 4]
 [5 6 7 8 9]]
刪除之后:
[[0 1 3 4]
 [5 6 8 9]]

5. 數(shù)組的索引、切片、子集
① 索引:獲取數(shù)組中特定位置元素的過程
一維數(shù)組的索引,與序列相似

import numpy as np
a = np.array([4,2,6,1,7])
print(a)
print("查找索引為3的元素:")
print(a[3])

結果:
[4 2 6 1 7]
查找索引為3的元素:
1

多維數(shù)組的索引每個維度一個索引值,逗號分割

import numpy as np
a = np.arange(24).reshape(2,3,4) #生成一個2x3x4的三維數(shù)組
print(a)
print("查找第一維度索引為1的數(shù)組")
print("a[1]:")
print(a[1])
print("查找第一維度索引為1、第二維度索引為2的數(shù)組")
print("a[1,2]:")
print(a[1,2])
print("查找第一維度索引為1、第二維度索引為2、第三維度索引為3的元素:")
print("a[1,2,3]:")
print(a[1,2,3])

結果:
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]
 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
查找第一維度索引為1的數(shù)組
a[1]:
[[12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]
查找第一維度索引為1、第二維度索引為2的數(shù)組
a[1,2]:
[20 21 22 23]
查找第一維度索引為1、第二維度索引為2、第三維度索引為3的元素:
a[1,2,3]:
23

② 切片:獲取數(shù)組元素子集的過程
一維數(shù)組的切片,與序列相似,有start、stop、step

import numpy as np
a = np.array([4,2,6,1,7,19,12])
print(a)
print("切出從索引0到索引4的元素:")
print("a[:5]:")
print(a[:5])

print("切出從索引1到索引5的元素:")
print("a[1:6]:")
print(a[1:6])

print("以間隔為2,切出元素:")
print("a[::2]:")
print(a[::2])

結果:
[ 4  2  6  1  7 19 12]
切出從索引0到索引4的元素:
a[:5]:
[4 2 6 1 7]
切出從索引1到索引5的元素:
a[1:6]:
[ 2  6  1  7 19]
以間隔為2,切出元素:
a[::2]:
[ 4  6  7 12]

多維數(shù)組的切片選取一個維度用: 每個維度切片方法與一維數(shù)組相同。
a[第一個維度,第二個維度,第三個維度]

import numpy as np
a = np.arange(24).reshape((2,3,4))
print(a)
print("第一維度不切片、第二維度切索引為1到2的、第三維度切0到3的片段")
print("操作:a[:,1:3,:4]")
print(a[:,1:3,:4])

print("第一維度不切片、第二維度切索引為1到2的、第三維度以步長為2切片")
print("操作:a[:,1:3,::2]")
print(a[:,1:3,::2])

print("第一維度得到最后一片、第二維度切索引為1到2的、第三維度以步長為2切片")
print("操作:a[1,1:3,::2]")
print(a[1,1:3,::2])

結果:
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]
 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
第一維度不切片、第二維度切索引為1到2的、第三維度切0到3的片段
操作:a[:,1:3,:4]
[[[ 4  5  6  7]
  [ 8  9 10 11]]
 [[16 17 18 19]
  [20 21 22 23]]]
第一維度不切片、第二維度切索引為1到2的、第三維度以步長為2切片
操作:a[:,1:3,::2]
[[[ 4  6]
  [ 8 10]]
 [[16 18]
  [20 22]]]
第一維度得到最后一片、第二維度切索引為1到2的、第三維度以步長為2切片
操作:a[1,1:3,::2]
[[16 18]
 [20 22]]

6. 標量運算

標量運算

① add(arr,num)

import numpy as np
a = np.array([[2,1],[3,2]])
print(a)
print("加法:")
print("np.add(a,2)")
print(np.add(a,2))

結果:
[[2 1]
 [3 2]]
加法:
np.add(a,2)
[[4 3]
 [5 4]]

② subtract(arr,num)

import numpy as np
a = np.array([[2,1],[3,2]])
print(a)
print("減法:")
print("np.subtract(a,2)")
print(np.subtract(a,2))

結果:
[[2 1]
 [3 2]]
減法:
np.subtract(a,2)
[[ 0 -1]
 [ 1  0]]

③ multiply(arr,num)

import numpy as np
a = np.array([[2,1],[3,2]])
print(a)
print("乘法:")
print("np.multiply(a,2)")
print(np.multiply(a,2))

結果:
[[2 1]
 [3 2]]
乘法:
np.multiply(a,2)
[[4 2]
 [6 4]]

④ divide(arr,num)

import numpy as np
a = np.array([[2,1],[3,2]])
print(a)
print("除法:")
print("np.divide(a,2)")
print(np.divide(a,2))

結果:
[[2 1]
 [3 2]]
除法:
np.divide(a,2)
[[1.  0.5]
 [1.5 1. ]]

⑤ power(arr,num)

import numpy as np
a = np.array([[2,1],[3,2]])
print(a)
print("冪運算:")
print("np.power(a,2)")
print(np.power(a,2))

結果:
[[2 1]
 [3 2]]
冪運算:
np.power(a,2)
[[4 1]
 [9 4]]

7. 向量運算


① np.add(arr1,arr2):兩個數(shù)組對應元素相加

import numpy as np
a = np.array([1,2,5,6]).reshape(2,2)
b = np.array([6,5,2,1]).reshape(2,2)
c = np.add(a,b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.add(a,b),a,b兩個數(shù)組對應元素相加')
print(c)

結果:
這是a數(shù)組
[[1 2]
 [5 6]]
這是b數(shù)組
[[6 5]
 [2 1]]
np.add(a,b),a,b兩個數(shù)組對應元素相加
[[7 7]
 [7 7]]

② np.subtract(arr1,arr2):兩個數(shù)組對應元素相減

import numpy as np
a = np.array([1,2,5,6]).reshape(2,2)
b = np.array([6,5,2,1]).reshape(2,2)
c = np.subtract(a,b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.subtract(a,b),a,b兩個數(shù)組對應元素相減')
print(c)

結果:
這是a數(shù)組
[[1 2]
 [5 6]]
這是b數(shù)組
[[6 5]
 [2 1]]
np.subtract(a,b),a,b兩個數(shù)組對應元素相減
[[-5 -3]
 [ 3  5]]

③ np.multiply(arr1,arr2):兩個數(shù)組對應元素相乘,而不是矩陣相乘的法則。

import numpy as np
a = np.array([1,2,5,6]).reshape(2,2)
b = np.array([6,5,2,1]).reshape(2,2)
c = np.multiply(a,b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.multiply(a,b),a,b兩個數(shù)組對應元素相乘')
print(c)

結果:
這是a數(shù)組
[[1 2]
 [5 6]]
這是b數(shù)組
[[6 5]
 [2 1]]
np.multiply(a,b),a,b兩個數(shù)組對應元素相乘
[[ 6 10]
 [10  6]]

④ np.divide(arr1,arr2):兩個數(shù)組對應元素相除

import numpy as np
a = np.array([12,10,1,6]).reshape(2,2)
b = np.array([6,5,2,1]).reshape(2,2)
c = np.divide(a,b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.divide(a,b),a,b兩個數(shù)組對應元素相除')
print(c)

結果:
這是a數(shù)組
[[12 10]
 [ 1  6]]
這是b數(shù)組
[[6 5]
 [2 1]]
np.divide(a,b),a,b兩個數(shù)組對應元素相除
[[2.  2. ]
 [0.5 6. ]]

⑤ np.power(arr1,arr2):將數(shù)組arr2中的元素作為數(shù)組arr1的對應元素的指數(shù)

import numpy as np
a = np.array([1,2,5,6]).reshape(2,2)
b = np.array([6,5,2,2]).reshape(2,2)
c = np.power(a,b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.power(a,b),將b的元素作為a對應元素的指數(shù)')
print(c)

結果:
這是a數(shù)組
[[1 2]
 [5 6]]
這是b數(shù)組
[[6 5]
 [2 2]]
np.power(a,b),將b的元素作為a對應元素的指數(shù)
[[ 1 32]
 [25 36]]

⑥ np.abs(x) np.fabs(x):計算數(shù)組各元素的絕對值

import numpy as np
a = np.array([-1,-2,5,6]).reshape(2,2)
b = np.array([-6,-5,2,1]).reshape(2,2)
c = np.abs(a)
d = np.fabs(b)
print('這是a數(shù)組')
print(a)
print('這是b數(shù)組')
print(b)
print('np.abs(a)')
print(c)
print('np.fabs(b),元素變?yōu)楦↑c型')
print(d)

結果:
這是a數(shù)組
[[-1 -2]
 [ 5  6]]
這是b數(shù)組
[[-6 -5]
 [ 2  1]]
np.abs(a)
[[1 2]
 [5 6]]
np.fabs(b),元素變?yōu)楦↑c型
[[6. 5.]
 [2. 1.]]

⑦ np.sqrt(x):計算數(shù)組各元素的平方根

import numpy as np
a = np.array([1,4,16,36]).reshape(2,2)
c = np.sqrt(a)
print('這是a數(shù)組')
print(a)
print('np.sqrt(a),計算數(shù)組a各元素的平方根')
print(c)

結果:
這是a數(shù)組
[[ 1  4]
 [16 36]]
np.sqrt(a),計算數(shù)組a各元素的平方根
[[1. 2.]
 [4. 6.]]

⑧ np.square(x):計算數(shù)組各元素的平方

import numpy as np
a = np.array([1,2,5,6]).reshape(2,2)
c = np.square(a)
print('這是a數(shù)組')
print(a)
print('np.square(a),計算數(shù)組a各元素的平方')
print(c)

結果:
這是a數(shù)組
[[1 2]
 [5 6]]
np.square(a),計算數(shù)組a各元素的平方
[[ 1  4]
 [25 36]]

⑨ np.log(x)、np.log10(x)、np.log2(x)
np.log(x):計算數(shù)組各元素的自然對數(shù)

import numpy as np
a = np.array([np.e,2,10,6]).reshape(2,2)
c = np.log(a)
print('這是a數(shù)組')
print(a)
print('np.log(a),計算數(shù)組a各元素的自然對數(shù)')
print(c)

結果:
這是a數(shù)組
[[ 2.71828183  2.        ]
 [10.          6.        ]]
np.log(a),計算數(shù)組a各元素的自然對數(shù)
[[1.         0.69314718]
 [2.30258509 1.79175947]]

np.log10(x):計算數(shù)組各元素的10底對數(shù)

import numpy as np
a = np.array([10,100,1000,2]).reshape(2,2)
c = np.log10(a)
print('這是a數(shù)組')
print(a)
print('np.log10(a),計算數(shù)組a各元素的10底對數(shù)')
print(c)

結果:
這是a數(shù)組
[[  10  100]
 [1000    2]]
np.log10(a),計算數(shù)組a各元素的10底對數(shù)
[[1.      2.     ]
 [3.      0.30103]]

np.log2(x):計算數(shù)組各元素的2底對數(shù)

import numpy as np
a = np.array([2,16,32,4]).reshape(2,2)
c = np.log2(a)
print('這是a數(shù)組')
print(a)
print('np.log2(a),計算數(shù)組a各元素的2底對數(shù)')
print(c)

結果:
這是a數(shù)組
[[ 2 16]
 [32  4]]
np.log2(a),計算數(shù)組a各元素的2底對數(shù)
[[1. 4.]
 [5. 2.]]

⑩ np.ceil(x)、np.floor(x)
np.ceil(x):數(shù)組各元素向上取整

import numpy as np
a = np.random.randn(2,2)
c = np.ceil(a)
print('這是a數(shù)組')
print(a)
print('np.ceil(a),數(shù)組a各元素向上取整')
print(c)

結果:
這是a數(shù)組
[[ 0.35828912  1.21284634]
 [-0.78966178  0.01141592]]
np.ceil(a),數(shù)組a各元素向上取整
[[ 1.  2.]
 [-0.  1.]]

np.floor(x):數(shù)組各元素向下取整

import numpy as np
a = np.random.randn(2,2)
c = np.floor(a)
print('這是a數(shù)組')
print(a)
print('np.floor(a),數(shù)組a各元素向下取整')
print(c)

結果:
這是a數(shù)組
[[-0.92498697 -0.24792889]
 [-0.7291078   1.64891259]]
np.floor(a),數(shù)組a各元素向下取整
[[-1. -1.]
 [-1.  1.]]

8. 統(tǒng)計函數(shù)


① mean(arr,axis):計算數(shù)組中的均值,axis是指定軸的均值,0是求每列的均值,1是求每行的均值

import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的均值,np.mean(a)")
print(np.mean(a))

print("求a每列的均值,np.mean(a,axis=0)")
print(np.mean(a,axis=0))

print("求a每行的均值,np.mean(a,axis=1)")
print(np.mean(a,axis=1))

結果:
[[2 1]
 [5 2]]
求a的均值,np.mean(a)
2.5
求a每列的均值,np.mean(a,axis=0)
[3.5 1.5]
求a每行的均值,np.mean(a,axis=1)
[1.5 3.5]

② var():返回數(shù)組arr中所有元素的方差

import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的方差,np.var(a)")
a_var = np.var(a)
print(a_var)

結果:
[[2 1]
 [5 2]]
求a的方差,np.var(a)
2.25

③ std():返回數(shù)組arr中所有元素的標準差

import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的標準差,np.std(a)")
a_std = np.std(a)
print(a_std)

結果:
[[2 1]
 [5 2]]
求a的方差,np.std(a)
1.5

④ corrcoef():返回數(shù)組arr中所有元素的相關系數(shù)

import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的相關系數(shù),np.corrcoef(a)")
a_corrcoef = np.corrcoef(a)
print(a_corrcoef)

結果:
[[2 1]
 [5 2]]
求a的相關系數(shù),np.corrcoef(a)
[[1. 1.]
 [1. 1.]]

⑤ sum():返回數(shù)組arr所有元素之和

import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的和,np.sum(a)")
a_sum = np.sum(a)
print(a_sum)

結果:
[[2 1]
 [5 2]]
求a的和,np.sum(a)
10

⑥ min():返回數(shù)組arr中最小元素

import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的最小元素,np.min(a)")
a_min = np.min(a)
print(a_min)

結果:
[[2 1]
 [5 2]]
求a的最小元素,np.min(a)
1

⑦ max():返回數(shù)組arr中最大元素

import numpy as np
a = np.array([[2,1],[5,2]])
print(a)
print("求a的最大元素,np.max(a)")
a_max = np.max(a)
print(a_max)

結果:
[[2 1]
 [5 2]]
求a的最大元素,np.max(a)
5

9. 矩陣的操作
科學計算中大量使用到矩陣運算,NumPy提供了矩陣對象。矩陣對象和數(shù)組對象主要有兩點差別:
矩陣是二維的,而數(shù)組可以是任意正整數(shù)維
矩陣的*操作符進行的是矩陣乘法,乘號左側的矩陣列和乘號右側的矩陣行大小要相等,而數(shù)組的*操作符是對應元素兩兩相乘,乘號兩側的數(shù)組每一維大小都需要一致。
① 矩陣的生成
1)np.asmatrix(arr)

import numpy as np
a = np.arange(15).reshape(3,5)
print('這是數(shù)組a')
print(a)
print('a的類型')
print(type(a))
m = np.asmatrix(a)
print('將數(shù)組a轉為矩陣m,np.asmatrix(a),得矩陣m')
print(m)
print('m的類型')
print(type(m))

結果:
這是數(shù)組a
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
a的類型
<class 'numpy.ndarray'>
將數(shù)組a轉為矩陣m,np.asmatrix(a),得矩陣m
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
m的類型
<class 'numpy.matrix'>

2)np.matrix(arr)

import numpy as np
m = np.matrix('1,2,8;6,5,3;4,9,7')
#使用該函數(shù)時,內部需為字符串,每行用分號隔開
print("矩陣m")
print(m)
print("查看類型type(m)")
print(type(m))

結果:
矩陣m
[[1 2 8]
 [6 5 3]
 [4 9 7]]
查看類型type(m)
<class 'numpy.matrix'>

3)np.mat(arr)

import numpy as np
a = np.arange(2,45,3).reshape(5,3)
print('這是數(shù)組a')
print(a)
print('a的類型')
print(type(a))
m = np.mat(a)
print('將數(shù)組a轉為矩陣m,np.mat(a),得矩陣m')
print(m)
print('m的類型')
print(type(m))

結果:
這是數(shù)組a
[[ 2  5  8]
 [11 14 17]
 [20 23 26]
 [29 32 35]
 [38 41 44]]
a的類型
<class 'numpy.ndarray'>
將數(shù)組a轉為矩陣m,np.mat(a),得矩陣m
[[ 2  5  8]
 [11 14 17]
 [20 23 26]
 [29 32 35]
 [38 41 44]]
m的類型
<class 'numpy.matrix'>

② 矩陣的乘法
直接按照矩陣的乘法來計算,用*來進行矩陣相乘,左矩陣的列數(shù)要等于右矩陣的行數(shù)

import numpy as np
left_m = np.mat(np.arange(1,5).reshape(2,2))
right_m = np.mat(np.arange(1,8,2).reshape(2,2))
print('左矩陣left_m')
print(left_m)
print('右矩陣right_m')
print(right_m)

print('兩個矩陣相乘')
print(left_m * right_m)

結果:
左矩陣left_m
[[1 2]
 [3 4]]
右矩陣right_m
[[1 3]
 [5 7]]
兩個矩陣相乘
[[11 17]
 [23 37]]

③ 矩陣的轉置
1)matrix.T

import numpy as np
m = np.mat(np.arange(9).reshape(3,3))
print("矩陣m")
print(m,'\n')
print("m的轉置T,矩陣矩陣m.T")
print(m.T)

結果:
矩陣m
[[0 1 2]
 [3 4 5]
 [6 7 8]] 

m的轉置T,矩陣矩陣m.T
[[0 3 6]
 [1 4 7]
 [2 5 8]]

2)np.transope(matrix)

import numpy as np
m = np.mat(np.arange(9).reshape(3,3))
print("矩陣m")
print(m,'\n')
print("m的轉置T,矩陣矩陣np.transope(m)")
print(np.transpose(m))

結果:
矩陣m
[[0 1 2]
 [3 4 5]
 [6 7 8]] 

m的轉置T,矩陣矩陣np.transope(m)
[[0 3 6]
 [1 4 7]
 [2 5 8]]

④ 求逆矩陣
linalg是numpy中用于線性代數(shù)計算的模塊,是linear algebra的簡寫

導入linalg

inv()函數(shù)求逆矩陣

import numpy as np
import numpy.linalg as nlg
m = np.mat(np.array([[4,9],[3,10]]))
inverse_m = nlg.inv(m)

print("矩陣m")
print(m,'\n')
print('m的逆矩陣,nlg.inv(m)')
print(inverse_m,'\n')
print('檢驗,inverse_m * m == 單位矩陣?')
print(inverse_m * m)


結果:
矩陣m
[[ 4  9]
 [ 3 10]] 

m的逆矩陣,nlg.inv(m)
[[ 0.76923077 -0.69230769]
 [-0.23076923  0.30769231]] 

檢驗,inverse_m * m == 單位矩陣?
[[1. 0.]
 [0. 1.]]

10. 缺失值
缺失值在量化分析中也是一種信息,NumPy提供了nan作為缺失值的記錄,通過isnan函數(shù)判定是否為缺失值。nan_to_num函數(shù)可以將nan替換成0。

np.nan可以得到缺失值,能將浮點數(shù)轉為缺失值

import numpy as np
a = np.array([[1,2],[3,4]],dtype=float)
print(a)
a[0,1] = np.nan
print("a[0,1]修改成缺失值之后")
print(a)

結果:
[[1. 2.]
 [3. 4.]]
a[0,1]修改成缺失值之后
[[ 1. nan]
 [ 3.  4.]]

isnan函數(shù)可以判斷是否有缺失值

import numpy as np
a = np.array([[1,2],[3,4]],dtype=float)
print(a)
a[0,1] = np.nan
print("a[0,1]修改成缺失值之后")
print(a)
print("isnan(a):")
print(np.isnan(a))

結果:
[[1. 2.]
 [3. 4.]]
a[0,1]修改成缺失值之后
[[ 1. nan]
 [ 3.  4.]]
isnan(a):
[[False  True]
 [False False]]

nan_to_num函數(shù)可以將nan值替換為0

import numpy as np
a = np.array([[1,2],[3,4]],dtype=float)
print(a)
a[0,1] = np.nan
print("a[0,1]修改成缺失值之后")
print(a)
a = np.nan_to_num(a)
print("將缺失值變?yōu)?,nan_to_num()")
print(a)

結果:
[[1. 2.]
 [3. 4.]]
a[0,1]修改成缺失值之后
[[ 1. nan]
 [ 3.  4.]]
將缺失值變?yōu)?,nan_to_num()
[[1. 0.]
 [3. 4.]]
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容