一、 初识numpy
1.1 tip
pycharm中可以用Ctrl + Enter在python consloe中运行代码(PyDev console: using IPython 7.22.0
1.2 code
import numpy as np
def main():
lst = [[1, 2, 3], [4, 5, 6]]
print(lst)
print(type(lst))
np_lst = np.array(lst, dtype=int) # 有以下几种类型:bool, int(默认即np.int32),np.int8/16/32/64, np.uint8/16/32/64,
# float(默认即np.float64),np.float32/64,complex(默认即 np.complex128),np.complex64/128
print(np_lst)
print(type(np_lst)) # <class 'numpy.ndarray'> numpy中定义的数组(数据结构)
print(np_lst.dtype) # 返回的时矩阵中每一项的类型
print(np_lst.ndim) # 返回维度(有点像矩阵的rank)
print(np_lst.shape) # 输出是 几乘几 的矩阵 (row, column)
print(np_lst.itemsize) # 输出每个值的字节大小
print(np_lst.size) # 矩阵大小即个数
if __name__ == '__main__':
main()
二、常用Array
1.1 tip
pycharm中可以用Ctrl + D复制光标所在的一行到下一行,Shift + Del删除光标所在的一行
1.2 code
import numpy as np
def main():
row = 2
column = 4
print(np.zeros((row, column))) # 返回0矩阵
print(np.zeros([row, column])) # 也可用列表
print(np.ones((row, column))) # 返回1矩阵
print(np.ones([row, column])) # 同样也可用列表
print("Rand:")
print(np.random.rand(row, column)) # 返回随机数矩阵 0-1 之间均匀分布的随机数
print(np.random.rand()) # 返回一个 0-1 之间均匀分布的随机数
print("RandInt:")
low = 1
high = 10
count = 4
print(np.random.randint(low, high, count)) # 返回 4 个 1-10 的随机数
print("Randn:")
print(np.random.randn(row, column)) # 返回随机数矩阵 标准正态分布的随机数
print(np.random.randn()) # 返回一个 标准正态分布的随机数
print("Choice:")
print(np.random.choice([1, 2, 3])) # 随机返回列表中其中一个
print("Distribute:") # 返回其他分布的随机数
print(np.random.beta(1, 10, 100)) # 返回一个Beta分布的随机数列表
if __name__ == '__main__':
main()
三、Array Operations
1.1 tip
pycharm中可以用Ctrl + C / Ctrl + X快速复制 / 剪贴光标所在行而无需选中任何内容
1.2 code
import numpy as np
def main():
print(np.arange(1, 11)) # 返回等差数列,左闭右开(左边要小于右边,否则返回空列表)
print(np.arange(1, 11).reshape((2, 5))) # 转化为2 x 5的矩阵(如果无法转化则报错)
print(np.arange(1, 11).reshape((2, -1))) # 当是负数时,第二个参数会自动转换 (即 个数/第一个参数 )
lst = np.arange(1, 11).reshape((2, -1))
print(np.exp(lst)) # 矩阵乘方 即e^lst
print(np.exp2(lst)) # 2的乘方 即2^lst
print(np.sqrt(lst)) # 开平方
print(np.sin(lst)) # 三角函数
print(np.log10(lst)) # 常用对数
print(np.log(lst)) # 自然对数
lst = np.array([
[[1, 2, 3, 4],
[5, 6, 7, 8]],
[[9, 10, 11, 12],
[13, 14, 15, 16]],
[[17, 18, 19, 20],
[21, 22, 23, 24]]
], dtype=int) # 3维数组(3 x 2 x 4)
print(lst.sum()) # 所有值求和
print(lst.sum(axis=0)) # 以最外层求和
print(lst.sum(axis=1)) # 以里面一层求和(同一层的数求和)
print(lst.sum(axis=2)) # 值越大层数越深,直到 维数 - 1
print(lst.max()) # 返回最大值
print(lst.max(axis=0)) # 同上
print(lst.max(axis=1)) # 同上
print(lst.max(axis=2)) # 同上
print(lst.min()) # 返回最小值
print(lst.min(axis=0)) # 同上
print(lst.min(axis=1)) # 同上
print(lst.min(axis=2)) # 同上
lst1 = np.array([1, 2, 3])
lst2 = np.array([4, 5, 6])
print(lst1 + lst2) # 矩阵加法,与python中的list不同 不是拼接
print(lst1 - lst2) # 矩阵减法
print(lst1 * lst2) # 乘法
print(lst1 / lst2) # 除法
print(lst1 ** lst2) # 乘方
print(np.concatenate((lst1, lst2), axis=0)) # 指定axis拼接
print(np.hstack((lst1, lst2))) # 左右拼接
print(np.vstack((lst1, lst2))) # 上下拼接
print(np.split(lst1, 3)) # 分割成3份
print(np.copy(lst)) # 拷贝
lst1 = np.array([
[1, 2],
[3, 4]
])
lst2 = np.array([
[5, 6],
[7, 8]
])
print(np.dot(lst1, lst2)) # 点乘
if __name__ == '__main__':
main()