本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Trick:纯demo,心在哪里,结果就在那里
# -*- coding: utf-8 -*-
# Author : szy
# Create Date : 2019/10/18
from array import array
import numpy as np
#numpy 的底层是用C实现的 计算效率非常高
a = [1,2,3,4]
# print(type(a))
#在python中 列表实际上是对象的数组
b = [4,'four']
# print(type(b))
#在python中一切都是对象
# #1. 数组的创建 ndarray
x1 = np.array([[[1,2,3]]])
# print(type(x1))
x2 = np.array([[1,2,3],[2,3,4]])
# print(x1.shape,x2.shape)
# print(x1.ndim,x2.ndim)
# print(x1.dtype)
# x3 = np.array([1.2,2.3])
# print(x3.dtype)
# x4 = np.array([2,1,3],dtype='float32')
# x1.dtype = 'float32'
# print(x4.dtype)
# print(x1.dtype)
# print(x1)
# #1.1 使用列表创建 上面的全都是这个内容
#
# #1.2 numpy还帮助我们封装了方便的创建一些demo数组的方法
# print(np.zeros((2,3)))
# print(np.ones((2,3,4)))
# print(np.full((3,5),2*3.14))
# # 机器学习 调参 grid_search
# # python3 原生是有一个 range()
# # python2 range() xrange()
# print(np.arange(0,20,2))
# #从0到1 ,给我分出20个元素0.1 20
# print(np.linspace(0,1,20))
#
#
# print(np.random.random((3,3)))
# # 生成正态分布(高斯分布) 方便的小工具
# print('normal',np.random.normal(loc=3,scale=4,size=(3,2,3),))
# # # 生成随机整数
# #
# print('randint',np.random.randint(low = 0,high = 10,size = (3,2)))
#
# # 生成单位矩阵 对角线为1 其他全部为0
# print(np.eye(10))
#
# # 生成未初始化矩阵,创建一个占地方用的矩阵,必须需要重新逐个元素赋值才能放心使用
# print(np.empty((2,30000000)))
第二部分
# -*- coding: utf-8 -*-
# Author : szy
# Create Date : 2019/10/19
import numpy as np
#1. 数组的属性
np.random.seed(1)
x1 = np.random.randint(10,size=6)
#reshape的用法
x2 = np.arange(1,13).reshape((3,4))
x3 = np.random.randint(10,size = (3,4,5))
# print(x1.ndim,x2.ndim,x3.ndim)
# # 形状 例子(2,3)
# print(x1.shape,x2.shape,x3.shape)
# #这个数组总计有多少个元素 例子6
# print(x1.size,x2.size,x3.size)
# print(x1.dtype)
# #每一个元素占几字节 8位1字节 8bits=1byte
# print(x2.itemsize)
# print(x3.nbytes)
# 2.数组的索引:
# print(x2)
# print(x2[0])
# print(x2[0][1])
# 坐标式写法 等价于上面的两个中括号的写法
print(x2[0,1])
# 假如想取第一列 第一个:表示所有的行,后面的0表示所有行的第一列 。。。必须使用坐标式表达方式
# print(x2[:,0])
# #注意,当使用:时,两种表示方法不同 这边表示所有行的第一行
# print(x2[:][0])
#[start:end:step]python列表的切片“,”后面的0表示第一个
# print(x2[::2,0])
# #最笨的方法,就是单独取出两个数,在组成一个数组
# print(np.array((x2[1,1],x2[2,2])))
#
# #坐标式取法,指定取某些元素
# print(x2[(1,2),(1,2)])
#
# #使用负数取索引
# print(x2[-1])
# #step同样可以使用负数
# print(x2[::-1])
# print(x2[::-1,::-1])
#
#
# # 所有切片出来的数组,即使你把它赋值给了新的变量,他也仍然全都是原数组的视图
#
# x2_sub = x2[:2,:2]
# print(x2_sub)
# x2_sub[0,0]=1000
# print(x2_sub)
# print(x2)
#
# # 3.数组的变形 通过reshape函数可以将任意两个总元素个数的数组相对转换,会返回一个新的数组对象2
# print(x3)
x4= x3.reshape(60)
# print(x3,x4)
#
# # 4.数组的拼接和分裂
# x = np.arange(1,4)
# y = np.arange(4,7)
# z = [7,8,9]
# print(x,y)
# # 在ndarray对象之间无法直接通过+来拼接
# #打破了一层壁垒,将原本两个独立的数组,拼接成了一个大数组
# x_y_z = np.concatenate([x,y,z])
# print(x_y_z)
# # #如果这样写,返回的会是一个列表
# x_y = np.array([x,y])
# print(x_y)
# #稍微有点绕 axis=0 在最外层融合 axis=1 在内部一层对位融合,在
# print(np.concatenate([x_y,x_y],axis=0))
# print(np.concatenate([x_y,x_y],axis=1))
# #
# # hstack vstack 相比之下更清晰 hsatack 竖落, vsrack横向
# print(np.vstack((x_y,x_y)))
# print(np.hstack((x_y,x_y)))
#
#
# # 数组的分裂 np.split 传入的参数是设置分割位置
# x = [1,2,3,99,99,3,2,1]
# x1, x2, x3 = np.split(x,[3,5])
# print(x1,x2,x3)
# # vsplit
# grid = np.arange(16).reshape(4,4)
# uper, lower = np.vsplit(grid,[3])
# print(grid)
# print(uper,lower)
#
# # hsplit
# lefter,righter = np.hsplit(grid,[1])
# print(lefter,righter)
第三部分
# -*- coding: utf-8 -*-
# Author : szy
# Create Date : 2019/10/21
import numpy as np
np.random.seed(0)
a = np.array([1,2,3,4,5,6]).reshape(2,3)
result = []
# for i in a:
# reciprocal = 1/i
# result.append(reciprocal)
#
# print(result)
#列表生成式
result = [1/i for i in a ]
print(result)
#更简单的方法: ndarray的通用函数
print(1/a)
# 如果参与运算的两个对象 都是数组,且形状相同,那么会对位彼此之间进行运算
print(a/a)
print(2**a)
# 可以支持的运算 abs() +-*/ 取负号
# 三角函数 np.sin cos tang arcsin arccos arctan
print(np.sin(a))
#指数和对数运算 exp exp2(x) 代表2^x np.power(3,x) np.ln log2 log10
#通用函数指定输出结果的用法
x = np.arange(5)
y= np.empty(5)
np.multiply(x,10,out=y)
print(y)
y = np.zeros(10)
np.power(2,x,out=y[::2])
print(y)
# 聚合函数 把一个序列 -》 一个数
# sum prod mean std var min max argmin argmax median中位数 precntile百分位数
print(x)