如何获得NumPy中的指数加权移动平均值,就像下面的熊猫一样?
import pandas as pd
import pandas_datareader as pdr
from datetime import datetime
# Declare variables
ibm = pdr.get_data_yahoo(symbols='IBM', start=datetime(2000, 1, 1), end=datetime(2012, 1, 1)).reset_index(drop=True)['Adj Close']
windowSize = 20
# Get PANDAS exponential weighted moving average
ewm_pd = pd.DataFrame(ibm).ewm(span=windowSize, min_periods=windowSize).mean().as_matrix()
print(ewm_pd)
Run Code Online (Sandbox Code Playgroud)
我用NumPy尝试了以下内容
import numpy as np
import pandas_datareader as pdr
from datetime import datetime
# From this post: http://stackoverflow.com/a/40085052/3293881 by @Divakar
def strided_app(a, L, S): # Window len = L, Stride len/stepsize = S
nrows = ((a.size - …
Run Code Online (Sandbox Code Playgroud) 目前我使用它来获取自定义属性值:
$_item = $this->getProduct()->getId();
$_product = $_product = Mage::getModel('catalog/product')->load($_item);
$optionvalue = $_product->getCustomAttributeValue();
echo $optionvalue;
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更简单的方法来获得这个自定义值而不加载整个产品?
有人可以帮我改写这个函数(doTheMath
函数)来在GPU上进行计算吗?我现在用了好几天试图绕过它,但没有结果.我想也许有人可以帮助我以你认为适合作为日志的任何方式重写这个函数,因为我在最后给出了相同的结果.我试图使用@jit
from numba
但由于某种原因,它实际上比常规运行代码慢得多.由于样本量很大,我们的目标是大大缩短执行时间,因此我相信GPU是最快的方法.
我会解释一下实际发生的事情.实际数据看起来几乎与下面代码中创建的样本数据完全相同,每个样本分为大约5.000.000行的样本大小或每个文件大约150MB.总共有大约600.000.000行或20GB的数据.我必须循环遍历这些数据,逐个样本然后逐行逐行,从每行中取出最后2000行(或另一行)并运行doTheMath
返回结果的函数.然后将该结果保存回硬盘驱动器,我可以使用另一个程序执行其他操作.如下所示,我不需要所有行的所有结果,只需要大于特定数量的行.如果我现在在python中运行我的函数,那么每1.000.000行大约需要62秒.考虑到所有数据以及应该用多快的速度,这是一段很长的时间.
我必须提一下,我借助于文件将真实数据文件上传到RAM,data = joblib.load(file)
因此上传数据不是问题,因为每个文件只需要大约0.29秒.上传后,我运行下面的整个代码.花费最长时间的是doTheMath
功能.我愿意将我在stackoverflow上获得的所有500个声望点作为奖励给那些愿意帮我重写这个简单代码以在GPU上运行的人.我的兴趣特别在于GPU,我真的很想看看它是如何解决这个问题的.
编辑/更新1:
这是一个指向真实数据的小样本的链接:data_csv.zip大约102000行真实数据1和2000行用于真实数据2a和data2b.用于minimumLimit = 400
实际样本数据
编辑/更新2: 对于这篇文章后面的人,这里是以下答案的简短摘要.到目前为止,我们对原始解决方案有4个答案.@Divakar提供的那个只是对原始代码的调整.在这两个调整中,只有第一个实际上适用于这个问题,第二个是一个很好的调整但不适用于此.在其他三个答案中,其中两个是基于CPU的解决方案和一个tensorflow-GPU尝试.Paul Panzer的Tensorflow-GPU似乎很有前景,但是当我在GPU上实际运行它时它比原来慢,所以代码仍然需要改进.
另外两个基于CPU的解决方案由@PaulPanzer(一个纯粹的numpy解决方案)和@MSeifert(一个numba解决方案)提交.与原始代码相比,这两种解决方案都能提供非常好的结果和两种处理数据.在Paul Panzer提交的两个中,速度更快.它在大约3秒内处理大约1.000.000行.唯一的问题是较小的batchSizes,这可以通过切换到MSeifert提供的numba解决方案,或者甚至是在下面讨论的所有调整之后的原始代码来克服.
我非常高兴并感谢@PaulPanzer和@MSeifert所做的关于他们答案的工作.不过,由于这是一个关于基于GPU的解决方案的问题,我等着看是否有人愿意尝试GPU版本,看看与当前的CPU相比,GPU上的数据处理速度有多快解决方案.如果没有其他答案胜过@PaperPanzer的纯粹numpy解决方案那么我会接受他的答案作为正确的答案并得到赏金:)
编辑/更新3: @Divakar已经发布了一个新的答案与GPU的解决方案.在对真实数据进行测试之后,速度甚至与CPU对应解决方案无法相比.GPU在大约1.5秒内处理大约5.000.000.这太不可思议了:)我对GPU解决方案感到非常兴奋,感谢@Divakar发布它.我感谢@PaulPanzer和@MSeifert的CPU解决方案:)现在我的研究继续以令人难以置信的速度归功于GPU :)
import pandas as pd
import numpy as np
import time
def doTheMath(tmpData1, data2a, data2b):
A = tmpData1[:, 0]
B = tmpData1[:,1]
C = tmpData1[:,2]
D = tmpData1[:,3]
Bmax = B.max()
Cmin = C.min()
dif = (Bmax - Cmin)
abcd = ((((A - Cmin) / …
Run Code Online (Sandbox Code Playgroud) 如何连接这些numpy
数组?
首先np.array
是一个形状(5,4)
[[ 6487 400 489580 0]
[ 6488 401 492994 0]
[ 6491 408 489247 0]
[ 6491 408 489247 0]
[ 6492 402 499013 0]]
Run Code Online (Sandbox Code Playgroud)
第二个np.array
有形状(1,5)
[ 16. 15. 12. 12. 17. ]
Run Code Online (Sandbox Code Playgroud)
最后的结果应该是
[[ 6487 400 489580 0 16]
[ 6488 401 492994 0 15]
[ 6491 408 489247 0 12]
[ 6491 408 489247 0 12]
[ 6492 402 499013 0 17]]
Run Code Online (Sandbox Code Playgroud)
我试过np.concatenate([array1, array2])
但是我得到了这个错误
ValueError: all …
在Keras中(使用TensorFlow作为后端)我正在构建一个模型,该模型使用具有高度不平衡类(标签)的庞大数据集.为了能够运行培训过程,我创建了一个生成器,将数据块提供给fit_generator
.
根据fit_generator的文档,生成器的输出可以是元组(inputs, targets)
或元组(inputs, targets, sample_weights)
.考虑到这一点,这里有几个问题:
class_weight
关于整个数据集sample_weights
的所有类的权重,而关于生成器创建的每个单独的块的所有类的权重.那是对的吗?如果没有,有人可以详细说明此事吗?class_weight
的fit_generator
,然后sample_weights
为每个块的输出?如果是,那为什么呢?如果不是那么哪一个更好?sample_weights
为每个块提供,如果特定块中缺少某些类,如何映射权重?让我举个例子.在我的整个数据集中,我有7个可能的类(标签).因为这些类是高度不平衡的,所以当我创建较小的数据块作为输出时fit_generator
,特定块中缺少某些类.我应该如何sample_weights
为这些块创建?我在Outlook 2010中有一个简单的VBA代码,可以自动打印任何传入的电子邮件.
此脚本设置为每次通过规则进入电子邮件时运行.
这是代码:
Sub printradu(Item As Outlook.MailItem)
MessageAndAttachmentProcessor Item, True
End Sub
Run Code Online (Sandbox Code Playgroud)
如何使此脚本等待10秒然后执行它.我需要这样的东西:
Sub printradu(Item As Outlook.MailItem)
'Wait 10 seconds then execute the code below:
MessageAndAttachmentProcessor Item, True
End Sub
Run Code Online (Sandbox Code Playgroud) 如何获得另一列中每个唯一值的一列最高值,以及如何返回相同的数据帧结构。这是一个熊猫数据框示例?
reg.nr counter value ID2 categ date
1 37367 421 231385 93 A 20.01.2004
2 37368 428 235156 93 B 21.01.2004
3 37369 408 234251 93 C 22.01.2004
4 37372 403 196292 93 D 23.01.2004
5 55523 400 247141 139 E 24.01.2004
6 55575 415 215818 139 F 25.01.2004
7 55576 402 204404 139 A 26.01.2004
8 69940 402 62244 175 B 27.01.2004
9 69941 402 38274 175 C 28.01.2004
10 69942 404 55171 175 D 29.01.2004
11 69943 416 …
Run Code Online (Sandbox Code Playgroud) 我安装了2个GPU,当我训练模型时,我收到以下消息.什么意思是"设备序数0和1 之间不支持对等访问"和"设备序号1和0之间不支持对等访问"?它是一个错误是我需要修复的东西吗?我的意思是,模型本身最终成功训练.我认为它只使用其中一个GPU,而不是两者.但我想了解此消息并解决问题.有什么我需要做的吗?
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:135] successfully opened CUDA library cublas64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:135] successfully opened CUDA library cudnn64_5.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:135] successfully opened CUDA library cufft64_80.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:135] successfully opened CUDA library nvcuda.dll locally
I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_loader.cc:135] successfully opened CUDA library curand64_80.dll locally
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "BestSplits" device_type: "CPU"') for unknown op: BestSplits
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "CountExtremelyRandomStats" device_type: "CPU"') for unknown op: CountExtremelyRandomStats
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\framework\op_kernel.cc:943] OpKernel ('op: "FinishedNodes" device_type: "CPU"') for unknown op: FinishedNodes …
Run Code Online (Sandbox Code Playgroud) 有人可以帮我理解这个问题.
我必须训练一个神经网络,它应该输出200个相互独立的类别,这些类别中的每一个都是从0到1的百分比.对我而言,这似乎是一个binary_crossentropy
问题,但我在互联网上看到的每个例子都使用binary_crossentropy
单个输出.由于我的输出应该是200,如果我申请binary_crossentropy
,这是正确的吗?
这是我的想法,是一个正确的方法还是我应该改变它?
inputs = Input(shape=(input_shape,))
hidden = Dense(2048, activation='relu')(inputs)
hidden = Dense(2048, activation='relu')(hidden)
output = Dense(200, name='output_cat', activation='sigmoid')(hidden)
model = Model(inputs=inputs, outputs=[output])
loss_map = {'output_cat': 'binary_crossentropy'}
model.compile(loss=loss_map, optimizer="sgd", metrics=['mae', 'accuracy'])
Run Code Online (Sandbox Code Playgroud) 给出以下数据帧
open high low close volume
0 74.090 74.144 74.089 74.136 0.000012
1 74.110 74.143 74.009 74.072 0.000419
2 74.074 74.190 74.063 74.081 0.000223
3 74.100 74.244 74.085 74.182 0.000429
4 74.194 74.222 74.164 74.199 0.000090
5 74.198 74.265 74.181 74.213 0.000071
6 74.223 74.244 74.120 74.174 0.000124
7 74.181 74.229 74.132 74.161 0.000087
8 74.164 74.337 74.126 74.324 0.000299
9 74.303 74.407 74.302 74.400 0.000185
10 74.408 74.440 74.373 74.409 0.000163
11 74.437 74.438 74.399 74.418 0.000208
12 74.428 …
Run Code Online (Sandbox Code Playgroud) python ×5
keras ×3
numpy ×3
pandas ×3
tensorflow ×3
dataframe ×1
magento ×1
numba ×1
outlook-vba ×1
performance ×1
theano ×1
vba ×1