(一)NumPy基础:数组和矢量计算

一、创建ndarray

1、各种创建函数的使用

import numpy as np
#创建ndarray
#1、array方法
data1 = [[6, 7.5, 8, 0, 1], [2, 8, 9.5, 10, 8]]
# 生成数组
arr1 = np.array(data1)
'''
shape-------->数组的形状
dtype-------->数组的数据类型
ndim--------->数组的维度
'''
print(arr1.shape, arr1.dtype, arr1.ndim)
'''
arange------->类似于range,返回数组
ones---------->参数是一个元祖,返回全一数组
ones_like----------->返回相同形状的数组,参数是数组
eye----------->单位矩阵
'''
print(np.arange(10))
print(np.zeros((3, 3)))
print(np.ones_like(arr1))
print(np.eye(10))

二、adarray的数据类型

1、dtype是一个属性,他可以确定一个数组的数据类型

import numpy as np
data1 = [[1, 2, 3, 4], [8, 9, 10, 11]]
#数据类型是一个类型名加一个表示各元素位长的数字
narr1 = np.array(data1, dtype = np.float64)
print(narr1)

2、数据类型转换(astype)

import numpy as np
data1 = [[1.8, 2.9, 3.7, 4], [8, 9, 10.8, 11]]
#数据类型是一个类型名加一个表示各元素位长的数字
narr1 = np.array(data1, dtype = np.float64)
#函数astype返回仍是数组,可以设置类型
print(narr1.astype(np.int64))

三、数组与标量的运算

数组可以使你不用编写循环即可对数据执行批量运算,通常叫做矢量化

import numpy as np
data1 = [[1, 2, 3, 4], [5, 6, 7, 8]]
narr1 = np.array(data1)
#乘法运算
print(narr1*narr1)
#减法运算
print(narr1-narr1)
#除法运算
print(1/narr1)
#开方运算
print(narr1**2)

 四、基本的索引和切片

1、将一个标量值赋给一个切片时,该值会自动传播到整个选区,跟列表最重要的区别在于,数组切片是原始数组的视图,数据不会被复制,视图上的任何修改都会直接反映到源数组上

import numpy as np
arr = np.arange(10)
print(arr) #([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(arr[5])  #5
print(arr[5:8])  #[5, 6, 7]
arr[5:8] = 12  #对arr[5:8]赋值,使得原数组改变
print(arr)


'''
即使将切片赋予一个新的变量,改变新
变量的值,仍然会改变原数组
'''
arr_slice = arr[5:8]
arr_slice[1] = 12345
print(arr)   #[    0     1     2     3     4    12 12345    12     8     9]

2、索引

import numpy as np
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2d)
print(arr2d[0])   #访问第0行
print(arr2d[0][1])   #访问第0行,第1列
print(arr2d[0, 1])   #访问第0行,第1列


arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(arr3d[0, 1, 1])   #5

3、布尔型索引

import numpy as np
names = np.array(["Bob", 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
data = np.random.randn(7, 4)  #生成正态分布的随机数据
print(data)
print(names == 'Bob')   
'''假设每个名字对应data数组中的一行,想要选出对应于名字‘Bob’的所有行,跟算术运算一样,数组的比较运算
也是矢量化的,'''
print(data[names == "Bob"])

4、数组转置和轴对换

a、转置(transpose)是重塑的一种特殊形式,它返回的是源数据的视图,数组不仅有transpose方法,还有一个特殊的T属性

import numpy as np
arr = np.arange(15).reshape(3, 5)
print(arr)
print(arr.T)   #转置
print(np.transpose(arr))#转置

5、通用函数

通用函数是一种对ndarray中数据执行元素级运算的函数,在做简单的矢量化包装器

import numpy as np
arr = np.arange(10)
print(np.sqrt(arr))  #求每个元素的开方
print(np.exp(arr))  #求自然常数的方

x = np.random.randn(10)
y = np.random.randn(10)

print(x)
print(y)
print(np.maximum(x, y))   #接受两个数组,返回一个结果数组

6、利用数组进行数据处理

Numpy数组使得可以将许多数据处理任务表述为简洁的数组表达式,用数组表达式代替循环的做法称为矢量化。

import numpy as np
import matplotlib.pyplot as plt
points = np.arange(-5, 5, 0.01)   #1000个间隔相等的点
xs, ys = np.meshgrid(points, points)
print(ys)
z = np.sqrt(xs**2+ys**2)
plt.imshow(z, cmap=plt.cm.gray)
plt.colorbar()
plt.title("Image plot of $\sqrt{x^2+y^2}$for a grid of values")
plt.show()

7、数学和统计方法---通过数组上的一组数学函数对整个数组或者某个轴向的数据进行统计计算

import numpy as np
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr.mean())
print(arr.sum())
print(arr.mean(axis=1))
print(arr.cumsum())   #累计和
print(arr.cumprod())  #累计积
print(arr.std())  #标准差
print(arr.var())   #方差

8、  随机漫步

import random
import matplotlib.pyplot as plt
position = 0
walk = [position]
steps = 100
for i in range(steps):
    step = 1 if random.randint(0, 1) else -1
    position += step
    walk.append(position)
plt.plot(range(101), walk)
plt.show()

import numpy as np
import matplotlib.pyplot as plt
#数组实现 position
= 0 nsteps = 100 draws = np.random.randint(0, 2, size=nsteps) steps = np.where(draws > 0, 1, -1) walk = steps.cumsum() print(walk) plt.plot(range(100), walk) plt.show()

9、一次模拟多个随机漫步

import numpy as np
import matplotlib.pyplot as plt
nwalks = 5000
nsteps = 1000
draws = np.random.randint(0, 2, size=(nwalks, nsteps))
steps = np.where(draws > 0, 1, -1)
walks = steps.cumsum(1)
print(walks.max())
print(walks.min())
print(walks)
hits30 = (np.abs(walks) >= 30).any(1)
print(hits30)
print(hits30.sum())

 

转载于:https://www.cnblogs.com/ai-bingjie/p/11167452.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值