python中numpy应用

import numpy as np

#将一个列表转换为一个矩阵
arr = np.array([1,2,3])
#arr.ndim: 矩阵的维度
#arr.shape: 矩阵的形状(长宽)
#arr.size: 矩阵一共有多少元素

#创建矩阵
#(1)传入的参数是list,例如以上得到的arr就是一个矩阵arr=[1 2 3]是没有逗号相间隔的
#print(arr)

#类型是dtype,默认是int64或者float64:,dtype表示的是数据的类型,不是本身的类型
# print(arr.dtype)
#
# #定义一个矩阵:矩阵的索引第一个是第一行
# arr2 = np.array([[1,2,3],[2,3,43]])
# print(arr2[0])

#生成全0矩阵
a = np.zeros((3,4),dtype=np.float64)
#生产全1的矩阵
b = np.ones((3,4),dtype=np.int64)
#生产有序的矩阵
c = np.arange(12).reshape(3,4)
#生产段,表示生成n个数字,期间距离相同
d = np.linspace(1,10,6).reshape(2,3)

m = np.array([10,20,30,40])
n = np.arange(4)
#一维矩阵的相减:m-n表示相应的元素相减
          #m*n表示对应的元素想乘
        #平方用b**2代表对应元素的平方
        #np.sim(b)代表对应元素正弦
        #print(b<3)返回的是只有truefalse的向量
# print(m,n)
# print(m*n)

#多维矩阵的运算
k = np.array([[1,2],
               [2,3]])
g = np.arange(4).reshape((2,2))
s = k*g
#代表对应的元素相乘
#np.dot(a,b)代表的是矩阵的乘法
#a.dot(b)与上面的表示方法一样

#随机生产的矩阵
y = np.random.random((2,4))

#计算矩阵的最小值和最小值的索引
A = np.arange(2,14).reshape(3,4)
#输出一列或者一行中的最大值或者最小值
minA = np.min(A,axis=0)
print(A)
print(minA)

#输出最小值或者最大值的索引,返回值是一个整数
wm = np.argmax(A)
print(wm)

#计算平均值
print(np.mean(A))
#计算中位数
print(np.median(A))
#计算累加值,第一个数就是第一个数,第二个是是前两个数的和,一次类推(返回的是一维的矩阵)
print(np.cumsum(A))
#计算累差(返回的是二位矩阵,即每一行是每一行的结果)
print(np.diff(A))
#找出非零数,返回一个元祖,包含一维矩阵两个矩阵!!!!
print(np.nonzero(A))
#排序,只是每一行进行排序,不会对所有的排序
print(np.sort((A)))
#矩阵的转置
print(np.transpose(A))
print((A.T).dot(A))
#所有小于5的数都设置为5,所有大于9的数都设置为9!!!
print(np.clip(A,5,9))

#计算平均,按行或者案按列
print(np.mean(A,axis=0))


AA  = np.arange(3,15).reshape(3,4)
print(AA.shape)
#print(AA[2,1]) 和print(AA[2][1])的效果相同

#按行和按列遍历,
#AA.flatten()是将矩阵转换为一维的矩阵!!!!!!!!
print(AA.flatten().shape)
#AA.flat是迭代器!!!!!!!!!
print(AA.flat)
for i in AA.flat:
    print(i)

# for i in AA:
#     print(i)
# #按照列进行遍历,就只是将AA转置一下.
# for i in AA.T:
#     print(i)


#矩阵的合并

#[np.newaxis,:] 代表在矩阵的每一行加上一格维度
#[:,np.newaxis] 代表在每一列上添加上一个维度
A1 = np.array([1,1,1])
B1 = np.array([2,2,2])[np.newaxis,:]
print(A1)
print(B1)

#横向的合并
C1 = np.vstack((A1,B1))  #两个括号
print(C1)
#纵向的合并
D1 = np.hstack((A1,B1))
print(D1)


#A1.T不会将一维的横向的矩阵转换为纵向的矩阵,但是高维的可以
print(A1)
print(A1.T)
#一维的横向矩阵转换如下:


D1 = np.concatenate((A1,B1,B1,A1),axis=1)
print(D1)


# #矩阵的分割
M = np.arange(12).reshape(3,4)
print(M)
# #矩阵的分割,axis=1表示按照纵向的分割,但是这是等量的分割
print(np.split(M,3,axis=0))
#不等量的分割如下是,后少
print(np.array_split(M,2,axis=0))
#还可以如下分割,横向的是v,纵向的是h
print(np.vsplit(M,3))
print(np.hsplit(M,2))


#python中,如果使用的是b=a那么b和a就是完全相同的,如果改变了a的值,那么b的值也会改变
#python中,如果没有一次性全部改变一个变量的值,那么两个变量会一直相同
"""
aa = [1,2,3]
bb = aa
aa[:2] = [9,0]
上面的aa和bb都会一直相同
但是一旦执行
aa = [7,8,9]那么aa,bb就不再一样,因为全部都改变了,全部改变相当于重新赋值

如果不想其中的两个变量
就是用copy,深度copy,只是赋值,但是没有关联

"""
aa = np.arange(4)
print(aa)
bb=aa.copy()
print(bb)
aa[0] = 5
print(bb)

猜你喜欢

转载自blog.csdn.net/yuyushikuan/article/details/80913359