小编Fag*_*ain的帖子

使用data.table在R中重新索引?

这是我最近遇到的一个常见问题 data.table

我有一个索引表,比如DT1.列x将是索引的子集.我将使用这些索引处理更大的rawtable的子表.子表通常会从1到N索引.(那就是y列)

然后,例如,我会遇到一个带有原始索引的索引对的表,我想知道相应的新索引.

这是它的样子

DT1 <- data.table(x=c(0,3,5),y= c(11,22,33))
DT2 <- data.table(x=c(3,3,0,0,5),x=c(0,5,0,3,5))
# > DT1
#    x y
# 1: 0 11
# 2: 3 22
# 3: 5 33

# > DT2
#    x x
# 1: 3 0
# 2: 3 5
# 3: 0 0
# 4: 0 3
# 5: 5 5
Run Code Online (Sandbox Code Playgroud)

这是我发现的曲折方式

cbind(DT1[DT2[,1,with=FALSE],on="x"][,2,with=FALSE],DT1[DT2[,2,with=FALSE],on="x"][,2,with=FALSE])
#     y  y
# 1: 22 11
# 2: 22 33
# 3: 11 11
# 4: 11 22
# 5: 33 …
Run Code Online (Sandbox Code Playgroud)

lookup indexing r lapply data.table

2
推荐指数
1
解决办法
331
查看次数

F#:static let和static成员

我是F#的菜鸟,目前在F#3.0上阅读专家.它是我正在学习的第一个编译语言(我只知道在R中编程)

在第6章,第117页,我们介绍了没有太多仪式静态let和静态成员.我真的不明白它是什么

type Vector2D(dx : float, dy : float) =
     static let zero = Vector2D(0.0, 0.0)
     static let onex = Vector2D(1.0, 0.0)
     static let oney = Vector2D(0.0, 1.0)
     /// Get the zero vector
     static member Zero = zero
     /// Get a constant vector along the X axis of length one
     static member OneX = onex
     /// Get a constant vector along the Y axis of length one
     static member OneY = oney 
Run Code Online (Sandbox Code Playgroud)

没有任何例子可以在书中继续进行.

我在F#interactive中键入它.从那里,我如何构造一个值为零(或onex ...)的变量x?

我正在尝试以下方法.什么都行不通

let x = Zero;; …
Run Code Online (Sandbox Code Playgroud)

f# static

2
推荐指数
1
解决办法
2951
查看次数

F#中的尾递归:使用Quicksort进行反演

嗨我在理解尾递归方面有些困难.我知道避免无限循环以及内存使用非常重要.我在"F#中的专家"中看到了一些关于像Fibonacci这样的简单函数的例子,但是当我的结果不仅仅是一个数字时,我认为我没有看过代码.

那么累加器会是什么?我不确定...

这是我写的一个递归函数.它使用快速排序算法计算数组中的反转次数.[它取自斯坦福大学的Coursera MOOC Algo I的练习]

如果有人能解释如何使尾部递归,我将不胜感激.[另外,我已经从命令式代码翻译了那段代码,因为我之前在R中写过,所以风格根本不起作用......]

另一个问题:语法是否正确,A是一个(可变)数组,我let A = ....到处都写过?为A <- ....更好地/一样的吗?

open System.IO
open System


let X = [|57; 97; 17; 31; 54; 98; 87; 27; 89; 81; 18; 70; 3; 34; 63; 100; 46; 30; 99;
    10; 33; 65; 96; 38; 48; 80; 95; 6; 16; 19; 56; 61; 1; 47; 12; 73; 49; 41;
    37; 40; 59; 67; 93; 26; 75; 44; 58; 66; 8; 55; 94; 74; 83; 7; 15; 86; …
Run Code Online (Sandbox Code Playgroud)

recursion f# tail-recursion mutable quicksort

1
推荐指数
1
解决办法
198
查看次数

F#System.InvalidOperationException:集合被修改; 枚举操作可能无法执行

我在F#中遇到这个问题[不是C#,其中已有类似的帖子有类似的答案]

我理解它不可能修改一个字典,而在for循环中枚举它我该如何解决?

let edgelist1 = [(1,2,3.0f);(1,2,4.0f);(5,6,7.0f);(5,6,8.0f)]
let dict_edges = new Dictionary<int*int,(int*int*float32) list>()
for x in edgelist1 do dict_edges.Add ((fun (a,b,c)-> (a,b)) x, x)
for k in dict_edges.Keys do dict_edges.[k] <- (dict_edges.[k] |> List.rev)
Run Code Online (Sandbox Code Playgroud)

System.InvalidOperationException:集合已被修改; 枚举操作可能无法执行.

System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource资源)位于System.Collections.Generic.Dictionary`2.KeyCollection.Enumerator.MoveNext()at.$ FSI_0101.main @()

这是有效的

dict_edges.[(1,2)] <- dict_edges.[(1,2)] |> List.rev;;
Run Code Online (Sandbox Code Playgroud)

在for循环中,我只需要更改字典值,而不是键.

谢谢

f# dictionary list

1
推荐指数
1
解决办法
128
查看次数

Pandas合并不保留排序顺序

我正在尝试以下方法:

PoliceStations_raw=pd.DataFrame(
[['BAYVIEW'   ,37.729732,-122.397981],
 ['CENTRAL'   ,37.798732,-122.409919],
 ['INGLESIDE' ,37.724676,-122.446215],
 ['MISSION'   ,37.762849,-122.422005],
 ['NORTHERN'  ,37.780186,-122.432467],
 ['PARK'      ,37.767797,-122.455287],
 ['RICHMOND'  ,37.779928,-122.464467],
 ['SOUTHERN'  ,37.772380,-122.389412],
 ['TARAVAL'   ,37.743733,-122.481500],
 ['TENDERLOIN',37.783674,-122.412899]],columns=['PdDistrict','XX','YY'])


df1=pd.DataFrame([[0,'CENTRAL'],[1,'TARAVAL'],[3,'CENTRAL'],[2,'BAYVIEW']])
df1.columns = ['Index','PdDistrict']


  Index PdDistrict
0   0   CENTRAL
1   1   TARAVAL
2   3   CENTRAL
3   2   BAYVIEW
Run Code Online (Sandbox Code Playgroud)

尽管已输入sort=False,但返回的对象已合并表但正在PdDistrict用作某个索引,并且已更改原始左数据帧的行的顺序.

pd.merge(df1,PoliceStations_raw,sort=False)
Run Code Online (Sandbox Code Playgroud)

返回此(注意顺序PdDistrict已更改)

  Index PdDistrict  XX        YY
0   0   CENTRAL 37.798732   -122.409919
1   3   CENTRAL 37.798732   -122.409919
2   1   TARAVAL 37.743733   -122.481500
3   2   BAYVIEW 37.729732   -122.397981
Run Code Online (Sandbox Code Playgroud)

python merge pandas

1
推荐指数
1
解决办法
1412
查看次数

python 上的 XGBoost:xgb.cv 有什么问题?

我正在尝试在 python 上使用 xgboost。这是我的代码。xgb.train工作,但我收到一个错误xgb.cv,尽管我似乎以正确的方式使用它。

以下对我有用:

###### XGBOOST ######

import datetime
startTime = datetime.datetime.now() 

import xgboost as xgb
data_train   = np.array(traindata.drop('Category',axis=1))
labels_train = np.array(traindata['Category'].cat.codes)

data_valid   = np.array(validdata.drop('Category',axis=1))
labels_valid = np.array(validdata['Category'].astype('category').cat.codes)

weights_train = np.ones(len(labels_train))
weights_valid  = np.ones(len(labels_valid ))

dtrain = xgb.DMatrix( data_train, label=labels_train,weight = weights_train)
dvalid  = xgb.DMatrix( data_valid , label=labels_valid ,weight = weights_valid )




param = {'bst:max_depth':5, 'bst:eta':0.05, # eta [default=0.3]
         #'min_child_weight':1,'gamma':0,'subsample':1,'colsample_bytree':1,'scale_pos_weight':0, # default
         # max_delta_step:0 # default
         'min_child_weight':5,'scale_pos_weight':0, 'max_delta_step':2,
         'subsample':0.8,'colsample_bytree':0.8,
         'silent':1, 'objective':'multi:softprob' }


param['nthread'] = 4 …
Run Code Online (Sandbox Code Playgroud)

python classification cross-validation xgboost

0
推荐指数
1
解决办法
4026
查看次数

MATLAB创建矩阵M = F(i,j)

假设我有2个变量的函数,F(i,j)这取决于矩阵的行索引和列索引,我想用值填充矩阵M_ij = F(i,j)

当然,这是有可能通过做一个循环i和j,甚至只有i或者j如果函数F可以向量化,但我想知道整洁的方式做到这一点.

matlab function matrix

-1
推荐指数
1
解决办法
138
查看次数