我有一个相对稀疏的数组,我想遍历每一行并只调整非零元素.
示例输入:
[2,3,1,0]
[0,0,2,1]
Run Code Online (Sandbox Code Playgroud)
示例输出:
[2,1,3,0]
[0,0,1,2]
Run Code Online (Sandbox Code Playgroud)
注意零如何改变位置.
要对每行中的所有元素(包括零)进行洗牌,我可以这样做:
for i in range(len(X)):
np.random.shuffle(X[i, :])
Run Code Online (Sandbox Code Playgroud)
我试图做的是这样的:
for i in range(len(X)):
np.random.shuffle(X[i, np.nonzero(X[i, :])])
Run Code Online (Sandbox Code Playgroud)
但它没有效果.我注意到返回类型与X[i, np.nonzero(X[i, :])]原因不同X[i, :].
In[30]: X[i, np.nonzero(X[i, :])]
Out[30]: array([[23, 5, 29, 11, 17]])
In[31]: X[i, :]
Out[31]: array([23, 5, 29, 11, 17])
Run Code Online (Sandbox Code Playgroud) 大家好,我正在为我正在研究的项目实施愚蠢的退避(第2页,等式5)平滑技术,我对它的实现有疑问.这是NLP中使用的平滑算法,Good-Turing是我猜最为人熟知的类似算法.
算法的简要描述是:当试图找到单词出现在句子中的概率时,它将首先在n-gram级别查找单词的上下文,如果没有该单词的n-gram,它将递归到(n-1)-gram并将其得分乘以0.4.递归停止在unigrams.
因此,如果我想在"晴天"的背景下找到"天"的概率,它首先会查看语料库中是否存在三维"晴天",如果不是,它会尝试相同的二元组"阳光灿烂的日子",最后它只是将"日"的频率除以语料库大小(训练数据中的单词总数).
我的问题是:每当我减小n-gram的大小时,我是否将得分乘以0.4?
因此,在上面的示例中,如果我们无法找到三元组或二元组,则最终得分为:
0.4*0.4*频率(天)/ corpus_size?
或者我只是在最后一级乘以一次,所以无论我需要做多少退避,我只是将最终得分乘以0.4?
这是关于学习多个模型的先前问题的后续跟进.
用例是我对每个主题都有多个观察结果,我想为每个主题训练一个模型.请参阅哈德利关于如何做到这一点的精彩演讲.
简而言之,这可以使用dplyr和purrr喜欢这样:
library(purrr)
library(dplyr)
library(fitdistrplus)
dt %>%
split(dt$subject_id) %>%
map( ~ fitdist(.$observation, "norm"))
Run Code Online (Sandbox Code Playgroud)
如此以来,建立模型是一个尴尬的并行任务,我在想,如果dplyr,purrr有一个易于使用的此类任务并行机制(如平行map).
如果这些库不提供易于并行化可以把它采用了经典的[R并行库(做parallel,foreach等)?
在Scala项目的build.sbt定义中,是否可以定义构建项目所需的最低版本的sbt?
Scala.Array包含一个函数toArray,作为ArrayOps的隐式导入.
是否有Array.toArray的用例或它是否总是返回该对象的副本?
因此,我尝试在 CUDA 中实现随机梯度下降,我的想法是对其进行并行化,类似于使用小批量的最佳分布式在线预测论文中描述的方式
该实现针对的是 MapReduce 分布式环境,因此我不确定它在使用 GPU 时是否是最佳选择。
简而言之,其想法是:在每次迭代时,计算批次(映射)中每个数据点的误差梯度,通过求和/减少梯度来取平均值,最后执行梯度步骤,根据平均梯度更新权重。下一次迭代从更新的权重开始。
推力库允许我对向量执行约简,例如允许我对向量中的所有元素求和。
我的问题是:如何求和/减少 CUDA/thrust 中的向量数组?输入将是一个向量数组,输出将是一个向量,该向量是数组中所有向量的总和(或者理想情况下是它们的平均值)。
使用推力它简单明了到求和行的交织(即支持由矢量)阵列,如图的例子这里。
我想做的是对数组的列求和。
我尝试使用类似的结构,即:
// convert a linear index to a column index
template <typename T>
struct linear_index_to_col_index : public thrust::unary_function<T,T>
{
T C; // number of columns
__host__ __device__
linear_index_to_col_index(T C) : C(C) {}
__host__ __device__
T operator()(T i)
{
return i % C;
}
};
// allocate storage for column sums and indices
thrust::device_vector<int> col_sums(C);
thrust::device_vector<int> col_indices(C);
// compute row sums by summing values with equal row indices
thrust::reduce_by_key
(thrust::make_transform_iterator(thrust::counting_iterator<int>(0), linear_index_to_col_index<int>(C)),
thrust::make_transform_iterator(thrust::counting_iterator<int>(0), linear_index_to_col_index<int>(C)) …Run Code Online (Sandbox Code Playgroud) 我经常不得不在 Scala 中运行一些耗时的实验,通常我会为同一个项目运行第二个 sbt 实例,在那里我对在另一个实例中运行的代码进行更改并进行编译。我这样做的原因是,在我的代码取得进展之前,我不必等待一个长时间运行的过程完成。
我的问题是:这样做是否安全,或者是否有可能在 sbt/scala 中重新编译当前正在运行的代码的一部分会导致我的运行过程出现问题?
到目前为止,我观察到的是,大多数情况下它都很好,但是在运行时重构我的代码时,我确实遇到过一次未定义的类错误。
说我有:
class Animal
class Bird extends Animal
class Dog extends Animal
Run Code Online (Sandbox Code Playgroud)
如何根据提供的参数编写返回运行时类型(Bird 或 Dog)的函数。
我正在尝试类似的东西:
import scala.reflect.ClassTag
def createAnimal[T <: Animal : ClassTag](doesItBark: Boolean): T = {
if (doesItBark) return new Dog()
else return new Bird()
}
val azor = createAnimal(doesItBark = true) //azor's type should be Dog
Run Code Online (Sandbox Code Playgroud)
哪个不起作用。
有可能在 Scala 中做这样的事情吗?
我有一个对象列表(在我的例子中,它们也是列表AFAII),由运行返回:
gof_stats <- models %>% map(gof_stats)
Run Code Online (Sandbox Code Playgroud)
哪里models是由创建的模型的列表fitdistrplus,并gof_stats是计算拟合统计的善良每个模型的功能.
现在,如果我想从该列表中提取特定的统计数据,我可以执行以下操作:
gof_stats[[1]]$cvm
Run Code Online (Sandbox Code Playgroud)
得到Cramer von Mises的统计数据.我可以在整个列表中实现相同的功能(根据链接的问题),如下所示:
cvms <- sapply(gof_stats, "[[", "cvm")
Run Code Online (Sandbox Code Playgroud)
有没有办法使用dplyr/ purrrsyntax 进行相同的操作?
奖励:您如何处理models列表中某些元素的情况NULL?