import sys
import numpy as np
import pandas as pd
def main():
np.set_printoptions(threshold=sys.maxsize) # 数组太大无法打印,会跳过中心部分打印角点,禁用此行为打印全部
# 创建
print(np.array([1, 2, 3])) # 创建数组
a = np.array([[1, 2], [3, 4]])
print(a.shape) # (2, 2) 数组维度,每个轴
print(a.dtype) # int32 元素类型
print(a.size) # 4 元素总数
print(a.itemsize) # 4 元素大小
print(a.ndim) # 2 维度
print(np.arange(6)) # [0 1 2 3 4 5]
print(np.arange(10, 30, 5)) # [10 15 20 25] 创建数组,间隔相同分割
print(np.arange(30).reshape(5, 6)) # 分割为二维数组,长度为5,内部每个数组长度为6
print(np.random.random((2, 3))) # [[0.14609899 0.51189478 0.75666616],[0.46556059 0.84267786 0.68384807]]
# 运算
# 按元素进行运算
a = np.array([2, 3, 4])
b = np.array([2, 2, 3])
print(a - b) # [1 1 1]
print(a ** 2) # [ 4 9 16] 求元素平方
print(a < 1) # [False False False]
print(a * b) # [ 2 6 12]
print(a @ b) # 每个元素相乘,然后相加
print(a.dot(b)) # 每个元素相乘,然后相加
x = np.random.random((2, 3))
print(x) # [[0.0876145 0.91328615 0.18603795],[0.39327751 0.11606926 0.58073591]]
print(x.sum(), x.min()) # 2.277021284092989 0.08761450096715961 多维数组作为一维数组处理
# 指定轴应用操作 axis参数
q = np.arange(12).reshape(3, 4)
# array([[0, 1, 2, 3],
# [4, 5, 6, 7],
# [8, 9, 10, 11]])
print(q.sum(axis=0)) # array([12, 15, 18, 21]) 对每一列求和
print(q.min(axis=1)) # array([0, 4, 8]) 列最小
print(q.min(axis=0)) # [0 1 2 3] 行最小
print(q.cumsum(axis=1)) # 0,列叠加,1,行叠加
# array([[0, 1, 3, 6],
# [4, 9, 15, 22],
# [8, 17, 27, 38]])
# 通用函数
w = np.array([1, 2, 3])
e = np.array([4, 5, 6])
print(np.add(w, e)) # 求和
print(np.all(w))
print(np.any(e))
print(np.isnan(e))
# 索引、切片、迭代
r = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(r[2:5])
print(r[::-1]) # 倒序
t = np.arange(15).reshape(3, 5)
for el in t.flat: # flat 属性 对数组的每个元素执行操作
print(el)
# 改变数组形状
y = np.floor(10 * np.random.random((4, 3)))
print(y.ravel()) # array([6., 8., 8., 2., 2., 6., 2., 1., 4., 0., 7., 5.])
print(y.reshape(6, 2))
print(y.T) # shape反转 4,3 -》 3,4
y.resize(6, 2) # resize修改数组本身,reshape是产生新的
print(y.reshape(2, -1)) # 自动计算-1的值
# 数组堆叠
a = np.floor(10 * np.random.random((2, 2)))
b = np.floor(10 * np.random.random((2, 2)))
print(np.vstack(a, b)) # 纵向
print(np.hstack(a, b)) # 横向
# column_stack
# 数组拆分
a = np.floor(10 * np.random.random((2, 12)))
np.hsplit(a, 3)
# 复制
c=a.view()
c=a.copy()
if __name__ == '__main__':
main()