Numpy基础

1、导入并查看Numpy版本

import numpy as np
print(np.__version__)

2、创建十个全为0的一维数组

all_zeros=np.zeros(10)

3、创建10个全为0的一维数据并修改数据类型为整数

all_zeros=np.zeros(10,dtype='int')

 4、创建20个0-100固定步长的数

value=np.arange(0,5,100)

5、从list创建数组

List=[1,2,3,4,5,6,7,8,9]
list2arr=np.array(List)

6、创建一个三行三列全是1的矩阵

matirix=np.ones((3,3))
# 方法2
matirix=np.array([[1,1,1],
                  [1,1,1],
                  [1,1,1]])

7、创建一个2行2列矩阵并且元素为布尔类型的True

# 方法1
matrix1=np.ones((2,2),dtype="bool")
# 方法2
matirix1=np.full((2,2),True,dtype=bool)

numpy.full的用法:

numpy.full(shape, fill_value, dtype=None, order='C', *, like=None)

返回一個給定形狀和類型的新數組,用fill_value填充

8、创建等差数列,从5开始,50结束,共十个数据

arr=np.linspace(start=5,stop=50,num=10)

 9 、创建等差数列,从5开始,50结束,共十个数据,数据类型为int32

arr=np.arrange(start=5,stop=50,num=10,dtype='int32')

arange()类似于内置函数range(),通过指定开始值、终值和步长创建表示等差数列的一维数组,注意得到的结果数组不包含终值。

linspace()通过指定开始值、终值和元素个数创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认值为True,即包含终值。

10、创建3X3矩阵,矩阵元素均为0-10之间的随机数

arr=np.random.randint(0,10,(3,3))    # randint表明是int类型的随机数

 11、创建3X3矩阵,矩阵元素均为服从标准正态分布的随机数

#服从正态分布的矩阵                   
arr=np.random.randn(3,3)     

  12、将第五题的result修改成3X3矩阵

result=result.reshape((3,3))   

  数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值。 

参考链接:https://blog.csdn.net/qq_29373285/article/details/82753306

kps = np.reshape(kps, [-1, 3])    

13、对上一题生成的result取转置

result=result.T      

14、查看result的数据类型

result.dtype #dtype=data type

15、将result的数据类型修改为float

result.astype('float')

16、提取result第三行第三列的元素

result[2,2]

 17、将result的第三行第三列的元素放大十倍

result[2,2]=result[2,2]*10

18、提取result中的所有偶数

result[result*2==0]

 19、将result中所有奇数修改成666

result[result%2==1]=666

20、创建主对角线都是5的5x5矩阵

np.diag([5,5,5,5,5])

21、交换第一列和第二列

#个人理解,:的意思是取所有的行
result[:,[1,0,2,3,4]]

22、交换第一行和第二行

result[[1,0,2,3,4],:]

23、判断两个矩阵是否有任何元素不同

a=np.random.randint(0,5,(5,5)) 
b=np.random.randint(0,5,(5,5))          
print(a==b)                    
print((a==b).all())   
/****************************解释***************************
第一行创建了随机的5X5矩阵a和b
a:[0 0 0 1 0]       
  [0 4 1 2 2]
  [3 0 3 1 2]
  [1 4 3 4 3]
  [0 0 4 0 0]


b:[0 4 3 2 2]
  [1 4 2 2 1]
  [2 2 4 1 1]
  [2 0 4 3 1]
  [4 0 1 2 3]

a==b 判断a矩阵中的Aij是不是等于b矩阵中的Bij,同样返回的是5X5的bool矩阵
all的用法是判断列表或者矩阵中的元素是不是都为True,如果是的话返回True,否则返回False
第三步得到的结果:
 [ True False False False False]
 [False  True False  True False]
 [False False False  True False]
 [False False False False False]
 [False  True False False False]
第四步得到的结果:
False

24、找到两个矩阵不同元素的个数

len(np.argwhere(a!=b) # arg:argument np.argwhere是找出元素的坐标

25、找到两个矩阵不同元素的位置

np.argwhere(a!=b)

26、对a和b做矩阵乘法

np.dot(a,b)
a.dot(b)
/******************************解释*******************************/
a:[4 4 0 2 4]
  [2 1 3 1 0]
  [2 1 4 0 1]
  [2 3 3 4 0]
  [2 2 0 1 4]

b: [0 0 3 2 3]
   [0 1 4 3 4]
   [4 0 2 0 3]
   [3 2 0 3 0]
   [1 0 0 2 0]
结果:
    [10  8 28 34 28]
    [15  3 16 10 19]
    [17  1 18  9 22]
    [24 11 24 25 27]
    [ 7  4 14 21 14]

27、计算a和b对应元素相乘

np.multiply(a,b)
a*b

28、计算行列式(使用20题生成的矩阵)

result=np.diag([5,5,5,5,5])
print(np.linalg.det(result))
/**********************************解释**********************************/
linalg:linearly algebra
numpy.linalg模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、特征值、解线性方程组以及求解行列式等

29、 计算逆矩阵(使用20题生成的矩阵)

result=np.diag([5,5,5,5,5])
print(np.linalg.inv(result))

30、将21与23题生成的np.array对象修改为np.matrix对象

https://blog.csdn.net/vincentlipan/article/details/20717163#:~:text=Numpy%20matrices%E5%BF%85%E9%A1%BB%E6%98%AF2,%E6%8B%A5%E6%9C%89array%E7%9A%84%E6%89%80%E6%9C%89%E7%89%B9%E6%80%A7%E3%80%82

a=np.matrix(a)
b=np.matrix(b)
/************************解释************************
np.matrix和np.array的区别:
Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。
参考链接:https://blog.csdn.net/vincentlipan/article/details/20717163#:~:text=Numpy%20matrices%E5%BF%85%E9%A1%BB%E6%98%AF2,%E6%8B%A5%E6%9C%89array%E7%9A%84%E6%89%80%E6%9C%89%E7%89%B9%E6%80%A7%E3%80%82

31、对31题生成的两个np.matrix格式矩阵做矩阵乘法。(对比异同)。

a*b
/***************************解释**************************/
在array中,都是逐元素计算的,所以a*b是矩阵中对应位置的相乘
在matrix中,a*b是矩阵的点乘,相等于dot运算。
/*******************************************************/

32、对30题生成的两个matrix格式矩阵对应元素乘积

np.multiply(a,b)

33、将ab两个矩阵按照行拼接

"""
# 创建一个(500,500)的符合正太分布的数组                                                       
# randn和normal的区别,randn是生成标准正态分布(均值为0,标准差为1),normal是生成正态分布 (均值和标准差需要自己设置)  
"""     
stock_data=np.random.normal(0,1,(500,500))                                      
a=stock_data[:2,0:4]                                                            
b=stock_data[10:12,0:4]                                                                                                                               
ab=np.hstack([a,b])          # h:horizon 水平,按照行拼接,a和b的对应行放在一起

"""
a: [-1.04016214 -1.18886941 -0.09304506  0.06712439]
   [ 1.2901525  -0.74843788 -2.28524141 -1.02828514]

b: [ 0.29143334  1.61952124 -0.49708346  1.68043726]
   [-1.19088374  0.90594722  0.72814536 -0.29100078]

ab: [-1.04016214 -1.18886941 -0.09304506  0.06712439  0.29143334  1.61952124 -0.49708346 1.68043726]
 [ 1.2901525  -0.74843788 -2.28524141 -1.02828514 -1.19088374  0.90594722  0.72814536 -0.29100078]
a:两行四列 b:两行四列 ab:两行八列
"""                           

    
ab1=np.vstack([a,b])   # vertical 垂直,按照列拼接   

"""
a: [ 0.51856166 -0.92199658  0.11480674  0.93551666]
   [-0.14545943  2.32839919 -1.66577729 -1.39514822]

b: [ 1.07185259  0.73868502  0.05372755  0.06264392]
   [ 0.57656547 -0.58346924  0.17935722 -0.21453095]

ab1: [ 0.51856166 -0.92199658  0.11480674  0.93551666]
     [-0.14545943  2.32839919 -1.66577729 -1.39514822]
     [ 1.07185259  0.73868502  0.05372755  0.06264392]
     [ 0.57656547 -0.58346924  0.17935722 -0.21453095]
a:两行四列 b:两行四列 ab1:四行四列
"""                                                                  
cab1=np.concatenate([a,b],1)  # 按照行拼接,矩阵a和b,相当于hstack
cab=np.concatenate([a,b],0) # 按照列拼接,相当于vstack
"""
a: [-1.54656119 -0.74738503 -0.25542205  0.03775523]
   [-1.6279168   0.21410622 -0.42335904  0.61137777]

b: [ 0.23546367  1.83913083 -1.56747831  0.10838006]
   [-1.17256061 -0.12873521  0.22496662  1.20485756]

cab:  [-1.54656119 -0.74738503 -0.25542205  0.03775523  0.23546367  1.83913083
        -1.56747831  0.10838006]
       [-1.6279168   0.21410622 -0.42335904  0.61137777 -1.17256061 -0.12873521
        0.22496662  1.20485756]

cab1: [-1.54656119 -0.74738503 -0.25542205  0.03775523]
      [-1.6279168   0.21410622 -0.42335904  0.61137777]
      [ 0.23546367  1.83913083 -1.56747831  0.10838006]
      [-1.17256061 -0.12873521  0.22496662  1.20485756]
"""

34、思考下面代码运行后new的结果

result=np.diag([5,5,5,5,5])                           
new=np.pad(result,pad_width=1,constant_values=1)      
"""
result: [5 0 0 0 0]
        [0 5 0 0 0]
        [0 0 5 0 0]
        [0 0 0 5 0]
        [0 0 0 0 5]

new:  [1 1 1 1 1 1 1]
      [1 5 0 0 0 0 1]
      [1 0 5 0 0 0 1]
      [1 0 0 5 0 0 1]
      [1 0 0 0 5 0 1]
      [1 0 0 0 0 5 1]
      [1 1 1 1 1 1 1]

按照pad_width在result周围填补一圈constant_value
"""
                                       

35、找到new中大于1的元素的位置

np.argwhere(new>1)

36、将new中大于1的元素修改为8

new[new>1]=8

37、对new矩阵按列求和

np.sum(new,0)

38、对new矩阵按行求和

np.sum(new,1)

39、找到每列的最大值

np.amax(data,axis=0)
"""
np.max和np.amax等价
np.max返回的是最大值
np.argmax返回的是最大值的索引
np.maximum输入的是两个数组,逐元素的比较两个矩阵的值大小。
np.maximum(a,b)
"""

40、找到每行的最小值

np.amin(data,axis=1)

41、计算data每个元素出现的次数

np.unique(data,return_counts=True)
# 会返回两个数组,一个是元素,另一个是元素出现的次数
from collections import Counter
Counter(data)
# 返回的是字典,key是元素,value是元素出现的次数

42、计算data每行元素大小排名

data.argsort()
"""

result=np.random.randint(0,50,(5,5))           
print(result)                                  
print(result.argsort())                        

result: [43 32 30  9  0]
        [15 41 24 32 11]
        [ 7 39  3  5 46]
        [39 43 20 43  4]
        [16 10 34 49 13]
结果:
 [4 3 2 1 0]
 [4 0 2 3 1]
 [2 3 0 1 4]
 [4 2 0 1 3]
 [1 4 0 2 3]


"""

43、将data按行重复一次

np.repeat(result,2,axis=0)

44、去掉data的重复行

np.unique(data,axis=0)

45、stack和numpy中的维度

数组的维度

stack增加维度

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值