矢量化

矢量化

矢量化指的是用数组代替标量来操作数组里的每个元素。

numpy提供了vectorize函数,可以把处理标量的函数矢量化,返回的函数可以直接处理ndarray数组。

#函数矢量化
import math as m
import numpy as np

def foo(x, y):
  return m.sqrt(x ** 2 + y ** 2)

x, y = 3, 4
print(foo(x, y))  # 5.0
x, y = np.array([3, 4, 5, 6]), np.array([4, 5, 6, 7])
# foo 函数矢量化 返回矢量化函数
foo_vec = np.vectorize(foo)
print(foo_vec(x, y))
# [5.         6.40312424 7.81024968 9.21954446]

print(np.vectorize(foo)(x, y))
# [5.         6.40312424 7.81024968 9.21954446]

numpy还提供了frompyfunc函数,也可以完成与vectorize相同的功能

# 把foo转换成矢量函数,该矢量函数接收2个参数,返回一个结果
fun = np.frompyfunc(foo, 2, 1)
d = fun(x, y)print(d)# [5.0 6.4031242374328485 7.810249675906654 9.219544457292887]

案例:定义一种买进卖出策略,通过历史数据判断这种策略是否值得实施。

# 矢量化
import numpy as np
import matplotlib.pyplot as mp
import datetime as dt
import matplotlib.dates as md

def dmy2ymd(dmy):
  """
  把日月年转年月日
  :param day:
  :return:
  """
  dmy = str(dmy, encoding=‘utf-8‘)
  t = dt.datetime.strptime(dmy, ‘%d-%m-%Y‘)
  s = t.date().strftime(‘%Y-%m-%d‘)
  return s

dates, opening_prices, highest_prices, lowest_prices, closing_prices =   np.loadtxt(‘aapl.csv‘,
             delimiter=‘,‘,
             usecols=(1, 3, 4, 5, 6),
             unpack=True,
             dtype=‘M8[D],f8,f8,f8,f8‘,
             converters={1: dmy2ymd})  # 日月年转年月日
# print(dates)
# 绘制收盘价的折现图
mp.figure(‘APPL‘, facecolor=‘lightgray‘)
mp.title(‘APPL‘, fontsize=18)
mp.xlabel(‘Date‘, fontsize=14)
mp.ylabel(‘Price‘, fontsize=14)
mp.grid(linestyle=":")

# 设置刻度定位器
# 每周一一个主刻度,一天一个次刻度

ax = mp.gca()
ma_loc = md.WeekdayLocator(byweekday=md.MO)
ax.xaxis.set_major_locator(ma_loc)
ax.xaxis.set_major_formatter(md.DateFormatter(‘%Y-%m-%d‘))
ax.xaxis.set_minor_locator(md.DayLocator())
# 修改dates的dtype为md.datetime.datetiem
dates = dates.astype(md.datetime.datetime)

# 定义买入卖出策略,计算每天的收益率
def profit(opening_price, highest_price,
           lowset_priec, closing_price):
  buying_price = opening_price * 1
  if (highest_price > buying_price > lowset_priec):
    return (closing_price - buying_price) / buying_price
  return np.nan
#计算每天的收益率:
profits = np.vectorize(profit)(opening_prices,highest_prices,lowest_prices,closing_prices)
print(profits)
isnan_mask = np.isnan(profits)
#取反
dates,profits = dates[~isnan_mask],profits[~isnan_mask]
mp.plot(dates,profits,‘o-‘,color=‘orangered‘,label=‘profits‘)

print(profits.mean())#-0.0015498765393923365

mp.legend()
mp.gcf().autofmt_xdate()
mp.show()

原文地址:https://www.cnblogs.com/maplethefox/p/11473799.html

时间: 2024-10-09 20:17:23

矢量化的相关文章

ArcScan自动矢量化

1 什么是自动矢量化     我们经常听说ArcGIS的自动矢量化,有什么样的应用呢,现在呢为大家揭开神秘面纱!!! ArcScan 提供了一些工具,用来将扫描图像转换为矢量要素图层.将栅格数据转换为矢量要素的过程称为矢量化.矢量化可通过交互追踪栅格像元来手动执行,也可使用自动模式自动执行. 交互式矢量化过程称为栅格追踪,这需要您追踪地图中的栅格像元来创建矢量要素.自动矢量化过程称为自动矢量化,这需要根据您所指定的设置为整个栅格生成要素. 有些组织需要将栅格图像转换为基于矢量的要素图层,这些组织

矢量化的HTML5拓扑图形组件设计

HT一直被客户称道的就是其全矢量化的设计特色,矢量相比传统图片好处太多了: www.hightopo.com/guide/guide/core/vector/ht-vector-guide.html 矢量可无级缩放,界面不失真不模糊 描述矢量的文本内容远比图片小得多 目前各种window.devicePixelRatio不一致的设备,矢量可能是唯一彻底的解决方案 业务数据绑定 提起矢量一般都会想到SVG,但这是个坑人的玩意儿,这么多年就没见一个完善的实现者,浏览器实现千差万别,高级属性根本不能玩

ufldl学习笔记与编程作业:Vectorization(向量化/矢量化)

ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其他机器学习的算法,可以直接来学dl. 于是最近就开始搞这个了,教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节学习链接:http://ufldl.stanford.edu/tutorial/supervised/Vectorization/ 什么是向量化?怎么样向量化? 简单

Atitit  图像处理Depixelizing Pixel Art像素风格画的矢量化

Atitit  图像处理Depixelizing Pixel Art像素风格画的矢量化 在去年的时候,偶然看到hqx算法. 一个高质量的插值放大算法. 与双线性插值等插值算法相比,这个算法放大后对人眼保护相对比较好. 没有双线性插值看起来模糊,固然,也抽空把算法简单优化了一下. 常规的图像填充采样放大 "经典"的图像填充采样放大,应用线性滤波器,或导出于分析插值理论.或导出于信号处理理论.使用滤波器的实例,比如"最近邻,Bicubic和Lancosz [ Wolberg 19

关于扫描地形图数字化/矢量化.

1.栅格地图的投影设置.一比一万的地形图采用西安80坐标系统,选择对应的投影,根据图上经纬度位置确定分带,使用arcgis的配准功能,输入对应的地理坐标.当然,要让图层用度分秒的方式显示才可以输入度分秒 , 否则你需要对地图上对应的经纬度坐标进行转换.输入至少三个点,因为地形图四个角上有相对应坐标,因此输入多一些点对你的精度是有好处的.最后输出图层,你便做完了第一步. 2.对图层进行二值化,黑白图,便于之后的数字化. 2.如果是等高线的数字化工作,新建一个线图层(其他图层则建立对应的特征图层),

ArcGIS 对图片投影 校准矢量化

1对图片投影 把影像打开先,工具箱-Data Management Tools-projections and transformations-define Projection 选择投影的时候 用 SELECT -projected coordinate systems - gauss kruger- xian1980或者一般设置为beijing54(UTM——WGS1984——WGS1984 UTM Zone 48N prj) - 最后根据你的影像选择就是了,比如你的影像是38度带的 3度分

地质图图例识别和矢量化

汉字识别关键技术与应用:https://www.cnblogs.com/2008nmj/p/11696995.html 基于OpenCV/TensorFlow的手写MNIST文字匹配:https://www.cnblogs.com/2008nmj/p/11662964.html 原文地址:https://www.cnblogs.com/2008nmj/p/12009886.html

【学习】基础知识:数组和矢量计量【Numpy】

Numpy是高性能科学计算和数据分析的基础包.功能如下: ndarray 一个具有矢量算法运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环) 用于读写磁盘数据的工具以及用于操作内存映射文件的工具. 线性代数.随机数生成以及傅里叶变换功能 用于集成由C\C++\Fortran等语言编写的代码的工具 numpy本身并没有提供多么高级的数据分析功能,理解numpy数组以及面向数组的计算将有助于更加高效地使用诸如pandas之类的工具 关注的功能集中在

水文分析工具软件教程

ArcGIS教程之DEM应用--水文分析 相关教程:           DEM之坡度坡向分析           Arcgis下DEM水文分析(二) 第一步:需要的工具 1. BIGEMPA地图下载器(全能版已授权)  下载地址:http://download.bigemap.com/bmsetup.rar 2. Global Mapper 14.     下载地址:Global Mapper 14.1汉化版.rar 3. ARCGIS下载地址:http://jingyan.baidu.com