有没有在Python OpenCV中使用HOGDescriptor功能的有用文档?我已经阅读了C++文档,但Python版本的功能不同,我无法通过修补来解决它.
最具体地说,我在Python中寻找一个OpenCV命令,它将图像和像素位置作为输入(可能还有一些关于检测窗口大小的参数)然后只返回一个包含HOG特征向量的Python数组(即列表或NumPy数组等,其中列表的第j个元素是来自定向梯度的直方图的第j个直方图分量.
我的目标是将这些直方图提供给scikits.learn SVM管道(所以我可以避免OpenCV SVM培训),但要做到这一点,我需要实际的特征向量本身,而不是那些OpenCV出现的HOG处理链管道的东西使用.
HOG代码的任何其他Python实现也会起作用.我需要一些合理有效的东西,但要与我自己编写的另一个代码库进行比较.
我在尝试使用a lambda或functools.partial从现有函数创建具有绑定位置参数的新函数时遇到了很多困惑.
我想做这样的事情(行为不符合要求):
def addFunction(self, name, in_function, secondary_args=None, secondary_kwargs=None):
# Assign the function with optional args based on whether any
# optional args are not None
if secondary_args is not None and secondary_kwargs is not None:
func = lambda x: in_function(x, *secondary_args, **secondary_kwargs)
elif secondary_args is None and secondary_kwargs is not None:
func = lambda x: in_function(x, **secondary_kwargs)
elif secondary_args is not None and secondary_kwargs is None:
func = lambda x: in_function(x, *secondary_args)
else:
func = in_function …Run Code Online (Sandbox Code Playgroud) NumPy/SciPy 中是否有任何通用工具来计算即使输入变量大小不同也能工作的相关性度量?在协方差和相关性的标准公式中,需要对每个不同的待测变量具有相同数量的观测值。通常,您必须传递一个矩阵,其中每一行是一个不同的变量,每一列代表一个不同的观察值。
在我的例子中,我有 9 个不同的变量,但对于每个变量,观察的数量不是恒定的。一些变量比其他变量有更多的观察。我知道有像传感器融合这样的领域研究这样的问题,那么有哪些标准工具可以计算不同长度的数据系列的关系统计(最好是在 Python 中)?
我知道,我知道,有很多简单的答案涵盖了大多数案例,以避免这种情况.
就我而言,我想使用用户输入信息在游戏中创建CPU播放器.如果用户选择简单模式,那么我想声明并实例化该类的实例EasyPlayer.否则,我想声明并实例化该类的实例HardPlayer.无论哪种方式,变量的特定名称必须是"cpu",其余代码不加选择地在"cpu"上运行.也就是说,这些操作的所有差异都构建在不同的类中,这些类是CpuPlayer类的子类.
所以这是代码:
// Set the opponent.
if (difficulty == 0){
EasyPlayer cpu = new EasyPlayer(num_rounds);
}
else{
HardPlayer cpu = new HardPlayer(num_rounds);
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个令人讨厌的cannot find symbol错误.从我可以阅读的内容来看,每个人都说你不能在这样的条件下进行声明,因为范围问题和它永远不会发生的可能性.
如果是这样,根据用户输入,将单个变量声明为两个不同类别之一的正确方法是什么?
在模拟结束时,我想将一些结果作为附加行写入数据文件。我使用的代码如下,在那里你可以假设outFile是正确分配为std::ofstream,这output_file是一个std::string包含对尚不存在的文件的有效路径,并打印到文件中的变量只是int类型的GET模拟期间的值。
outFile.open(output_file.c_str(), std::ios::out | std::ios::app );
outFile << num_nodes << ", " << tot_s << ", " << tot_c << ", " << tot_d << std::endl;
outFile.close();
Run Code Online (Sandbox Code Playgroud)
我已经检查过它是否使用该ofstream::is_open()函数正确打开了文件并返回false. 但是,我无法弄清楚为什么。我已经尝试了许多不同的文件名和目录路径,所有这些我都检查过并且它们是有效的(没有错别字等)
正在写入的文件只是在桌面上的一个文件夹中,我一直在其中创建文件,所以我不知道它怎么可能是权限问题。如果是权限问题,我该如何检查?
否则,还有什么可以阻止它写入文件?
添加:
跟进评论,在添加对 的调用后perror(),显示“没有这样的文件或目录”错误。有问题的文件路径是:
/home/ely/Desktop/Evolutionary_Dynamics/GamesOnCycle/data/test.data
Run Code Online (Sandbox Code Playgroud)
我希望创建这个文件,并且该路径中的所有目录都存在,它都拼写正确,等等,并且 GamesOnCycle 文件夹或其数据子文件夹没有奇怪的权限问题。请注意,它是一个 linux 系统(Ubuntu 11.04),因此文件路径的正斜杠是正确的,除非我遗漏了 C++ 必须具有 wrt 文件路径的内容。
对于项目,我需要复制当前存在于Stata输出文件(.dta)中的一些结果,并且是从较旧的Stata脚本计算的.该项目的新版本需要用Python编写.
我遇到困难的具体部分是基于Stata xtile命令的加权版本匹配分位数断点计算.请注意,数据点之间的关系与权重无关,而我使用的权重来自连续数量,因此关系极不可能(并且我的测试数据集中没有关系).所以由于关系而错误分类不是这样.
我已经阅读了关于加权百分位数的维基百科文章以及这个交叉验证的帖子,该文章描述了应该复制R的7型分位数的替代算法.
我已经实现了两种加权算法(底部的代码),但是我仍然不能很好地匹配Stata输出中的计算分位数.
有谁知道Stata例程使用的具体算法?文档没有清楚地描述这一点.它说的是在CDF的平坦部分采取平均值来反转它,但这几乎不能描述实际的算法,并且对于它是否正在进行任何其他插值是模棱两可的.
注意numpy.percentile并且scipy.stats.mstats.mquantiles不接受权重并且不能执行加权分位数,只是常规的等权重分数.我的问题的关键在于需要使用重量.
注意:我已经在下面调试了两种方法,但如果你看到一个,可以随意在评论中提出错误.我已经在较小的数据集上测试了这两种方法,结果很好,并且在我可以保证R使用的方法的情况下也匹配R的输出.代码不是那么优雅,而且在两种类型之间复制的太多,但是当我相信输出是我需要的时候,所有这些都将被修复.
问题是我不知道Stata xtile使用的方法,并且我希望减少下面的代码和Stata xtile在同一数据集上运行时的不匹配.
我试过的算法:
import numpy as np
def mark_weighted_percentiles(a, labels, weights, type):
# a is an input array of values.
# weights is an input array of weights, so weights[i] goes with a[i]
# labels are the names you want to give to the xtiles
# type refers to which weighted algorithm.
# 1 for wikipedia, 2 …Run Code Online (Sandbox Code Playgroud) 我正在使用 Pandas 0.8.1,目前我无法更改版本。如果较新的版本可以帮助解决下面的问题,请在评论中而不是在答案中注明。此外,这是针对研究复制项目,因此即使在仅附加一个新数据点后重新运行回归可能很愚蠢(如果数据集很大),我仍然必须这样做。谢谢!
在 Pandas 中,参数 to有一个rolling选项,但似乎暗示这需要选择窗口大小或使用整个数据样本作为默认值。我希望以累积方式使用所有数据。window_typepandas.ols
我正在尝试对pandas.DataFrame按日期排序的进行回归。对于每个索引i,我想使用从最小日期到索引日期的可用数据运行回归i。因此,窗口在每次迭代时有效地增长 1,从最早的观察开始累积使用所有数据,并且没有数据从窗口中丢失。
我编写了一个函数(如下)apply来执行此操作,但速度慢得令人无法接受。相反,有没有一种方法可以pandas.ols用来直接执行这种累积回归?
这里有一些关于我的数据的更多细节。我有一个pandas.DataFrame包含一列标识符、一列日期、一列左侧值和一列右侧值。我想使用groupby基于标识符进行分组,然后对由左侧和右侧变量组成的每个时间段执行累积回归。
这是我可以apply在标识符分组对象上使用的函数:
def cumulative_ols(
data_frame,
lhs_column,
rhs_column,
date_column,
min_obs=60
):
beta_dict = {}
for dt in data_frame[date_column].unique():
cur_df = data_frame[data_frame[date_column] <= dt]
obs_count = cur_df[lhs_column].notnull().sum()
if min_obs <= obs_count:
beta = pandas.ols(
y=cur_df[lhs_column],
x=cur_df[rhs_column],
).beta.ix['x']
###
else:
beta = np.NaN
###
beta_dict[dt] = beta
###
beta_df = pandas.DataFrame(pandas.Series(beta_dict, name="FactorBeta"))
beta_df.index.name …Run Code Online (Sandbox Code Playgroud) 假设您有一个包含多个值构造函数的LogMessage数据结构,例如像这样的数据结构:
data LogMessage = Unknown String
| LogMessage MessageType TimeStamp String
Run Code Online (Sandbox Code Playgroud)
如果消息可以正确解析,它有一些额外的数据然后a String.如果它无法解析,那么它只是一个全能Unknown String.
或者假设你正在使用类似的东西Either String String,以便你可能正在处理一个Left String或一个Right String.
现在假设您希望将相同的处理步骤应用于基础数据,而不管它驻留在哪个值构造函数中.
例如,我可能想要检测LogMessage字符串中的某个单词,所以我可以使用这样的函数:
detectWord :: String -> LogMessage -> Bool
detectWord s (Unknown m) = isInfixOf s (map toLower m)
detectWord s (LogMessage _ _ m) = isInfixOf s (map toLower m)
Run Code Online (Sandbox Code Playgroud)
或者它可以很容易地编写Either String String为输入而不是LogMessage.
在这两种情况下,我都必须重复完全相同的代码(isInfixOf ...部分),因为由于不同值构造函数上的模式匹配,我必须提取它将以不同方式操作的基础数据.
对于每个不同的值构造函数匹配,必须重复/"复制 - 粘贴"代码是很糟糕的.
如何在没有复制/粘贴代码的情况下编写这些类型的Haskell函数?我怎样才能编写底层逻辑一次,然后解释如何在许多不同的值构造函数模式中使用它?
简单地将其移动到辅助辅助函数会减少字符数,但并不能真正解决问题.例如,下面的想法在实质上没有比第一种情况更好的"不重复自己":
helper …Run Code Online (Sandbox Code Playgroud) Conda 版本 4.2.9,来自 RedHat 4.4.7-1 的 anaconda3 4.2.0 安装。
[user@machine]$ conda info --envs
# conda environments:
#
molr-py3 /home/user/anaconda3/envs/molr-py3
root * /home/user/anaconda3
[user@machine]$ source activate molr-py3
CondaEnvironmentNotFoundError: Could not find environment: molr-py3 .
You can list all discoverable environments with `conda info --envs`.
Run Code Online (Sandbox Code Playgroud)
我什至不确定在这种情况下要采取哪些调试步骤。我已经验证conda来自正确的 anaconda 路径等。
我还尝试chmod -R a+rwX了envs目录,然后是anaconda3目录,但这没有影响。
所有不同的conda-*命令在 .bashrc 中都有别名,以指向 .bashrc 中存在的版本anaconda3/bin,因此它不使用任何anaconda2版本的conda东西。此外,activate脚本 fromanaconda3/bin的别名为 to,activate因此它也不使用该anaconda2 activate …
requests我正在使用一种有点标准的模式来在 Python 中的请求周围放置重试行为,
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
retry_strategy = Retry(
total=HTTP_RETRY_LIMIT,
status_forcelist=HTTP_RETRY_CODES,
method_whitelist=HTTP_RETRY_METHODS,
backoff_factor=HTTP_BACKOFF_FACTOR
)
adapter = HTTPAdapter(max_retries=retry_strategy)
http = requests.Session()
http.mount("https://", adapter)
http.mount("http://", adapter)
...
try:
response = http.get(... some request params ...)
except requests.Exceptions.RetryError as err:
# Do logic with err to perform error handling & logging.
Run Code Online (Sandbox Code Playgroud)
不幸的是,RetryError 上的文档没有解释任何内容,当我如上所述拦截异常对象时,err.response是None. 虽然您可以调用str(err)来获取异常的消息字符串,但这将需要不合理的字符串解析来尝试恢复特定的响应详细信息,即使有人愿意尝试,该消息实际上也会忽略必要的详细信息。例如,来自某个站点上的故意调用的一个此类响应给出了 400 秒(并不是说您真的会重试此操作,而只是为了调试),它会给出一条消息 -"(Caused by ResponseError('too many 400 error responses'))"它忽略了实际的响应详细信息,例如请求站点自己的描述文本400 错误的性质(这对于确定处理至关重要,甚至只是回传以记录错误)。
我想要做的是接收 …
python ×7
numpy ×3
python-3.x ×2
anaconda ×1
arguments ×1
c++ ×1
conda ×1
covariance ×1
declaration ×1
environment ×1
exception ×1
file-io ×1
gradient ×1
haskell ×1
java ×1
lambda ×1
ofstream ×1
opencv ×1
optimization ×1
pandas ×1
partial ×1
percentile ×1
regression ×1
retry-logic ×1
stata ×1