科学计算系列学习 01:Numpy

科学计算系列学习 01:Numpy
科学计算系列学习 02:Pandas
科学计算系列学习 03:Matplotlib


介绍:Numeric Python,它是一个由多维数组对象和用于处理数组的例程集合组成的库。

import numpy as np

# 定义矩阵
a = np.array([1,2,3],dtype=np.int)          # 一维矩阵,设置为整数方式存在,也可以:dtype=np.float
b = np.zeros((3,4),dtype=np.float)          # 
c = np.ones((3,4),dtype=np.float)
d = np.arange(12).reshape((3,4))            # 定义一个三行四列,共12个值的矩阵 
e = np.linspace(1,10,8).reshape(2,4)

print(a,'\n',b,'\n',c,'\n',d,'\n',e)

# 矩阵的属性
array = np.array([[1,2,3],[4,5,6]])         # 二维矩阵/数组
print(array)
print('number of dimmension:',array.ndim)   # array.ndim 几维矩阵
print('shape',array.shape)                  # array.shape 矩阵几行几列
print('size',array.size)                    # array.size 矩阵几个元素

# 基础运算 1

# 逐个相加减乘除
a = np.array([10, 20, 30, 40])
b = np.arange(4)
print(a, b)
c1 = a - b
c2 = a + b
c3 = a*b
print(c1, c2, c3)

# 比较运算,返回布尔值列表
print(b<3)
print(b==3)

# 矩阵相乘
aa = np.array([1,1]
              [0,1])
bb = np.arange(4).reshape(2,2)

# 逐个相乘
cc1 = aa*bb
# 矩阵相乘
cc3 = np.dot(aa, bb)
cc4 =aa.dot(b)


# 矩阵求和,最值
d = np.random.rand((2, 4))  # 两行四列的矩阵,值为随机生成的0-1之间
print(d)
print(np.sum(a, axis=1))    # axis=0代表行,=1代表列
print(np.min(a, axis=0))
print(np.max(a, axis=1))
print(np.average(d))

# 基础运算 2

# 找出索引
e = np.arange(2, 14).reshape((3, 4))
print(e)
print(np.argmin(e))
print(np.argmax(e))

# 索引找值
A = np.arange(3,15).reshape(3,4)
print(A)
print(A[2], [1])
print(A[2, 1])
print(A[2, :])
print(A[2, 1:3])

# 迭代每一行
for row in A:
    print(row)

# 迭代每一列
for column in A.T:
    print(column)

# 迭代所有
print(A.flatten())

# flat:迭代索引返回一个迭代器
for item in A.flat:
    print(item)

# 合并

A = np.array([1, 1, 1])  # 三行
B = np.array([2, 2, 2])  # 三行

C = np.vstack((A, B))    # 两行三列  vertical stak  上下合并
print(C)
print(A.shape, C.shape)

D = np.hstack((A, B))    #
print(D)
print(D.shape)


# 行变列

A1 = np.array([1, 1, 1])[:, np.newaxis]
B1 = np.array([2, 2, 2])[:, np.newaxis]
C1 = np.hstack((A1, B1))
print(A1.shape, C1.shape)

# 分割

A = np.arange(12).reshape((3, 4))
print(A)

print(np.split(A, 3, axis=0)) # 分成几块,横向还是竖向分
print(np.vsplit(A, 3))        # 横向分割三块,同上
print(np.split(A, 4, axis=1))
print(np.hsplit(A, 2))        # 竖向分割两块,同上

print(np.array_split(A, 3, axis=1)) # 不平均分割,一个两列,两个一列

# 浅复制 & 深复制

a = np.arange(4)
b = a
c = a

print(a)
c[1] = 88     # 修改c之后,a也会跟着改变,这就是浅复制,理解为链接复制
print(a)

d = a.copy()  #加.copy()是深复制,更改d不会同时改变a
d[3] = 33
print(a, d)

你可能感兴趣的:(科学计算系列学习 01:Numpy)