numpy一些基础知识

 

 

 

In [1]:
import numpy as np
 

创建一个数组

In [2]:
arry1 = np.array([[1,2,3]
                ,[4,5,6]])
In [3]:
farry1
Out[3]:
array([[1, 2, 3],
       [4, 5, 6]])
 

查看数组的一些属性(维数等)

In [4]:
print('the dimension of arry is',arry1.ndim)
 
the dimension of arry is 2
In [5]:
print('the shape of arry is',arry1.shape)#显示(行数,列数)
 
the shape of arry is (2, 3)
In [6]:
print('the size of arry is',arry1.size) #显示有几个元素
 
the size of arry is 6
 

定义array的type

In [7]:
arry2 = np.array([1,2,3],dtype=np.int64)#定义为整型
print(arry2.dtype)
 
int64
 

生成0矩阵

In [8]:
arryzero = np.zeros((3,4))#3行4列
arryzero
Out[8]:
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
 

生成1矩阵

In [9]:
arrayone = np.ones((3,6))
arrayone
Out[9]:
array([[1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.]])
In [10]:
print('the default dtype of arryone is',arrayone.dtype)
 
the default dtype of arryone is float64
 

生成空矩阵

In [11]:
arrayempty = np.empty((3,6))
arrayempty
Out[11]:
array([[1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.]])
 

生成有序数组

In [12]:
arrayarrange = np.arange(10,20,2)
In [13]:
arrayarrange
Out[13]:
array([10, 12, 14, 16, 18])
In [14]:
arrayarrange2 = np.arange(12).reshape(3,4)#重新定义其形状
arrayarrange2
Out[14]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
 

生成一个线段

In [15]:
lines = np.linspace(0,9,10)#在0~9之间生成10段,包含终值
lines
Out[15]:
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
In [16]:
lines.reshape((2,5))
Out[16]:
array([[0., 1., 2., 3., 4.],
       [5., 6., 7., 8., 9.]])
 

numpy的基础运算

 

设置

In [17]:
a = np.arange(10,50,10)
b = np.arange(4)
a,b
Out[17]:
(array([10, 20, 30, 40]), array([0, 1, 2, 3]))
In [18]:
c = a-b
c
Out[18]:
array([10, 19, 28, 37])
In [19]:
c = a+b
c
Out[19]:
array([10, 21, 32, 43])
In [20]:
c = b**2
c#每个元素都平方
Out[20]:
array([0, 1, 4, 9], dtype=int32)
 

三角函数的运算

In [21]:
c = 10*np.sin(a)#a中每一个值都代入sin中再*10
c
Out[21]:
array([-5.44021111,  9.12945251, -9.88031624,  7.4511316 ])
 

矩阵中的布尔运算

In [22]:
print(b<3) #生成布尔列表,看哪个数小于3
 
[ True  True  True False]
 

乘法运算

In [23]:
d = np.array([[10,10]
              ,[10,10]])
e = np.arange(4).reshape(2,2)
d,e
Out[23]:
(array([[10, 10],
        [10, 10]]), array([[0, 1],
        [2, 3]]))
In [24]:
f = d*e#逐个相乘
f
Out[24]:
array([[ 0, 10],
       [20, 30]])
In [25]:
f = np.dot(d,e)#等同于d.dot(e)
f
Out[25]:
array([[20, 40],
       [20, 40]])
 

随机矩阵

In [26]:
g = np.random.random((3,2))#生成一个随机的数列,()里面为一个shape
g
Out[26]:
array([[0.05466126, 0.31259655],
       [0.14907873, 0.36597221],
       [0.16032719, 0.30097574]])
 

一些内置函数

 
数组求和(里面所有数加起来)
In [27]:
g = np.sum(f)
g
Out[27]:
120
In [28]:
g = np.sum(f,axis=0)#每一列加起来 axis=1为每一行加起来的值
g
Out[28]:
array([40, 80])
 
最大值和最小值
In [29]:
np.max(f),np.min(f)
Out[29]:
(40, 20)
In [30]:
np.max(f,axis=0)#每一行的最大值
Out[30]:
array([20, 40])
In [77]:
np.max(f,axis=1)#每一列的最大值
Out[77]:
array([40, 40])
 

索引

 

一维

In [31]:
A = np.arange(3,15)
A
Out[31]:
array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
In [32]:
A[3]
Out[32]:
6
 

二维

In [33]:
A = np.arange(3,15).reshape(3,4)
A
Out[33]:
array([[ 3,  4,  5,  6],
       [ 7,  8,  9, 10],
       [11, 12, 13, 14]])
In [34]:
A[2]#第三行
Out[34]:
array([11, 12, 13, 14])
In [35]:
A[1][1]#第二行的第二个,等价于A[1,1]
Out[35]:
8
In [36]:
A[2,:]#:代表所有数,这个代表第三行所有数.
Out[36]:
array([11, 12, 13, 14])
In [37]:
A[:,1]# 第二列的所有数
Out[37]:
array([ 4,  8, 12])
In [38]:
A[1,1:]# 第二行,索引值为1~末端的值
Out[38]:
array([ 8,  9, 10])
 

有关迭代

In [39]:
for row in A:
    print(row)#默认按行迭代
 
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
In [40]:
for column in A.T:#T代表转置矩阵
    print(column)
 
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
In [41]:
for item in A.flat:#.flat把多维数组压成一维的.返回的是一个迭代器
    print(item)
 
3
4
5
6
7
8
9
10
11
12
13
14
In [42]:
A.flatten()#返回一个一维数组
Out[42]:
array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])
 

array的合并

In [60]:
A = np.ones((1,3))
B = np.array([2,2,2])
A,B
Out[60]:
(array([[1., 1., 1.]]), array([2, 2, 2]))
 

上下合并

In [44]:
E = np.vstack((A,B,B,B))#vertical stack
E
Out[44]:
array([[1., 1., 1.],
       [2., 2., 2.],
       [2., 2., 2.],
       [2., 2., 2.]])
 

增维操作

In [45]:
print(B.T.shape)#没有转置,缺少维度
 
(3,)
In [50]:
C = B[:,np.newaxis]#在列上增了一维
print(C,C.shape)
 
[[2]
 [2]
 [2]] (3, 1)
In [62]:
D = B[np.newaxis,:]#在行上增了一维
B = D
print(D,D.shape)
 
[[2 2 2]] (1, 3)
In [63]:
B
Out[63]:
array([[2, 2, 2]])
 

左右合并

In [64]:
print(np.hstack((B,A)))#horizontal stack
 
[[2. 2. 2. 1. 1. 1.]]
In [65]:
C = np.concatenate((A,B,B),axis=0)#可以要求在哪一个维度合并,axis=0 为上下合并
C
Out[65]:
array([[1., 1., 1.],
       [2., 2., 2.],
       [2., 2., 2.]])
 

数列分割

 

等分割

In [66]:
print(np.split(C,3,axis=0)) #(array,split_section,axis=)
 
[array([[1., 1., 1.]]), array([[2., 2., 2.]]), array([[2., 2., 2.]])]
 

不等分割

In [67]:
print(np.array_split(C,4,axis=0))
 
[array([[1., 1., 1.]]), array([[2., 2., 2.]]), array([[2., 2., 2.]]), array([], shape=(0, 3), dtype=float64)]
In [68]:
print(np.vsplit(E,2))
 
[array([[1., 1., 1.],
       [2., 2., 2.]]), array([[2., 2., 2.],
       [2., 2., 2.]])]
In [69]:
print(np.hsplit(E,3))
 
[array([[1.],
       [2.],
       [2.],
       [2.]]), array([[1.],
       [2.],
       [2.],
       [2.]]), array([[1.],
       [2.],
       [2.],
       [2.]])]
 

copy 和 deep copy

In [70]:
a = np.arange(4)
b = a
c = a
d = b
In [71]:
a[0] = 11
a
Out[71]:
array([11,  1,  2,  3])
In [72]:
b#都变成11
Out[72]:
array([11,  1,  2,  3])
In [73]:
d
Out[73]:
array([11,  1,  2,  3])
In [74]:
d [1:3] = [22,33]
d
Out[74]:
array([11, 22, 33,  3])
In [ ]:
a#指针指向的内存地址一样,要变就一起变了
In [75]:
b = a.copy() #deep copy
a[3] = 44
b#最后一个没变44
Out[75]:
array([11, 22, 33,  3])
In [76]:
a
Out[76]:
array([11, 22, 33, 44])
posted @ 2020-03-13 09:59  negu  阅读(227)  评论(0编辑  收藏  举报