小编Cau*_*ity的帖子

在Haskell中读取字符串到Int的性能(Bytestring vs [Char])

只是对Bytestring和String做一些简单的基准测试.代码加载10,000,000行的文件,每行一个整数; 然后将每个字符串转换为整数.事实证明Prelude.read比慢得多ByteString.readInt.

我想知道效率低下的原因是什么.同时,我也不确定性能分析报告的哪一部分对应于加载文件的时间成本(数据文件大约为75 MB).

这是测试的代码:

import System.Environment
import System.IO
import qualified Data.ByteString.Lazy.Char8 as LC

main :: IO ()
main = do
  xs <- getArgs
  let file = xs !! 0

  inputIo <- readFile file
  let iIo = map readInt  . linesStr $ inputIo
  let sIo = sum iIo

  inputIoBs <- LC.readFile file
  let iIoBs = map readIntBs  . linesBs $ inputIoBs
  let sIoBs = sum iIoBs

  print [sIo, sIoBs]

linesStr = lines

linesBs  = LC.lines


readInt …
Run Code Online (Sandbox Code Playgroud)

string int haskell type-conversion bytestring

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

在 Pandas DataFrame 上使用 float_format 调用 to_string 的问题

使用时pandas DataFrame,我可以to_string(float_format='%.1f')DataFrame. 但是,当对 应用相同的方法时df.describe(),它失败了。

这个问题是不言自明的,代码如下。

>>> df = pd.DataFrame([[1, 2, 'March'],[5, 6, 'Dec'],[3, 4, 'April'], [0, 1, 'March']], columns=['a','b','m']) 
>>> df
   a  b      m
0  1  2  March
1  5  6    Dec
2  3  4  April
3  0  1  March
>>> df.to_string(float_format='%.1f')
u'   a  b      m\n0  1  2  March\n1  5  6    Dec\n2  3  4  April\n3  0  1  March'
>>> df.describe().to_string(float_format='%.1f')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

在haskell中具有高性能的可变随机访问阵列/向量

这个关于Haskell的主题讨论了很多(例如可变数组实现),但我仍然不确定需要频繁修改和随机访问数组/向量的情况的最佳实践是什么.

说一个长度为1,000,000的向量.对其进行操作涉及基于输入访问其(小的,例如1000个)子集,并基于输入修改值.此外,这种操作重复2,000,000次.任务本身可以在纯数据结构中实现,例如列表,如下所示,尽管效率很低:

type Vect = [Int]

f :: Vect -> [[Int]] -> Vect
f x indsList = foldl g x indsList

-- g is just an example of random-access and modifications on the values.
g :: Vect -> [Int] -> Vect
g x inds = map h $ zip x [0..]
    where h (x, i) = if i `elem` inds then x !! i + 1 else x !! i
Run Code Online (Sandbox Code Playgroud)

散列/映射数据结构(例如IntMap)可以用于有效的大量随机访问,但是数组/向量也应该这样做.更重要的是,仍需要通过可变结构来解决大量修改以避免存储器复制.Haskell中是否存在可变的随机访问数组/向量?如果使用ST/IO Monads,这些控件会影响我的设置吗?

arrays haskell vector mutable random-access

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

如何编写sortBy,unionBy等更简洁的lambda函数

函数喜欢sortBy并将unionBylambda函数作为参数.lambda函数通常在从列表元素中获取某些部分之后compareeq之后执行.例如,

f v1 v2 = sortBy (\x y -> compare (fst x) (fst y)) $ 
            unionBy (\x y -> (fst x) == (fst y)) (zip v1 [0..]) (zip v2 [0..])
Run Code Online (Sandbox Code Playgroud)

只是想知道lambda函数是否\x y -> compare (fst x) (fst y)可以更简洁地编写.

sorting lambda haskell list

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

在R中,是否有任何本机函数来获取矩阵的行或列,具体取决于参数?

我目前正在使用此实现:

getVal = function(i, x, margin) {
    rst = ifelse(margin==1, x[i, ], x[, i])
}
Run Code Online (Sandbox Code Playgroud)

即返回x的第i行OR列,具体取决于margin的值.

===更新===

刚刚意识到我ifelse(x,y,z)在这里使用语句是错误的,因为它返回的值与第一个参数的长度相同.我的实施getVal应该有:

...
rst = if (margin == 1) x[i, ] else x[, i]
...
Run Code Online (Sandbox Code Playgroud)

r

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

在Linux shell或awk中,如何用其域替换行中的url

例如,输入:

line1 col1-1 http://www.google.com/index.html col3-1 col4 col5 col6 col7 col8
line2 col1-2 https://user:pwd@www.facebook.com/pp/index.html col3-2 col4 col5 col6 col7 col8
line3 col1-3 badColumn col3-3 col4 col5 col6 col7 col8
Run Code Online (Sandbox Code Playgroud)

应该结果

line1 col1-1 http://www.google.com col3-1 col4 col5 col6 col7 col8
line2 col1-2 https://www.facebook.com col3-2 col4 col5 col6 col7 col8
line3 col1-3 badColumn col3-3 col4 col5 col6 col7 col8
Run Code Online (Sandbox Code Playgroud)

有可能用awk一个线性(subregex?)来实现它.否则,你将如何在bash中实现它?

regex url bash shell awk

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