我有一个循环,这是我最大的时间吮吸一个特定的功能,我想加快它.目前,这个单循环占用大约400ms,而其余功能的执行大约需要610ms.
代码是:
for ctr in xrange(N):
list1[ctr] = in1[ctr] - in1[0] - ctr * c1
list2[ctr] = in2[ctr] - in2[0] - ctr * c2
list3[ctr] = c3 - in1[ctr]
list4[ctr] = c4 - in2[ctr]
Run Code Online (Sandbox Code Playgroud)
N可以是大约40,000到120,000之间的任何值,并且是显示的所有列表(in1,in2,listN)的长度.
有谁知道一些Python技巧来加快这个速度?我已经尝试过使用map,因为我知道它会尝试编译为更高效的代码,但速度大约慢了250ms.
谢谢
Haskell中的Int
a和a 之间有区别Maybe Int
吗?如果有,我该如何转换Maybe Int
为Int
?
我是Haskell编程的新手.我试图理解这种语言的语法和语义.我对严重口音的语义有点好奇.当我们使用严重重音时,为什么此代码有效?
elem' :: (Eq a) => a -> [a] -> Bool
elem' a [] = False
elem' a (x:xs)
| a == x = True
| otherwise = a `elem'` xs {-grave accent used in this line -}
Run Code Online (Sandbox Code Playgroud) 我决定使用Haskell 从Standford算法课程https://class.coursera.org/algo-005解决第一个编程任务.尽管我对语言很陌生,但我实现它的速度比c ++快得多.我有6年以上的c ++工作经验,所以给我留下了深刻的印象.但性能令人失望:0.19秒(c ++)vs 9.88(haskell)版本.如何提高Haskell实现的性能,使其可以与c ++相媲美?
这是我在Haskell中的代码
data SortedList = SortedList {
inversionCount :: Int,
list :: [Int]
} deriving (Show)
-- first list accumulator
packm :: Int -> SortedList -> Int -> SortedList
packm x (SortedList count xs) add = SortedList (count + add) (x:xs)
merge2 :: [Int] -> [Int] -> SortedList
merge2 [] xs = SortedList 0 xs
merge2 xs [] = SortedList 0 xs
merge2 xlist@(x:xs) ylist@(y:ys)
| x < y = packm x …
Run Code Online (Sandbox Code Playgroud) 我知道我能做到
> print '|{:16.3f}|\n|{:16.3f}|'.format(1, 10)
| 1.000|
| 10.000|
Run Code Online (Sandbox Code Playgroud)
填充一个数字,以便输出是一定数量的列,我可以这样做
> print '|{:<16.3f}|\n|{:<16.3f}|'.format(1, 10)
|1.000 |
|10.000 |
Run Code Online (Sandbox Code Playgroud)
左对齐格式化字段。有没有办法同时做这两件事?我想在填充数字上进行左对齐,所以我的输出看起来像
> print '|{:<format>}|\n|{:<format>}|'.format(1, 10)
| 1.000 |
|10.000 |
Run Code Online (Sandbox Code Playgroud)
<format>
我想要解决的问题在哪里。具体来说,我想要一个 6 字符格式的浮点数,小数点后 3 位左对齐到 16 列。我知道我可以使用多种字符串格式来解决这个问题,但我想同时完成这一切。
我有GHCi,版本7.8.3.我想计算sqrt项的总和,它可以被10整除.
如果我写[ x | x <- [10..100], x `mod` 10 == 0]
或sum [sqrt x | x <- [10..100]]
正确.
但如果我sum [ sqrt x | x <- [10..100], x `mod` 10 == 0]
在显示错误时写入:
'<interactive>:39:1:
No instance for (Show t0) arising from a use of ‘print’
The type variable ‘t0’ is ambiguous
Note: there are several potential instances:
instance Show Double -- Defined in ‘GHC.Float’
instance Show Float -- Defined in ‘GHC.Float’
instance (Integral a, Show a) …
Run Code Online (Sandbox Code Playgroud) 我有一个基于NumPy的库,有一些类重载算术运算.由于大量的错误检查,内部有点毛茸茸,但我遇到了一个严重的问题,我是怎么做的.
该库背后的想法是使程序员使用最少的语法和努力使其非常容易和直观.因此,我希望很容易组合不同数据类型的数组,并简单地将较窄的数据类型转换为更广泛的情况.
例如,如果我有两个数组,一个使用dtype float64
,另一个使用dtype complex128
,当将它们添加到一起时,我想将其转换float64
为complex128
,但如果是,float64
并且complex192
我想转换为它.但是,如果它是一个组合float64
和complex64
,没有不失精确度两者之间的有效转换float64
,所以我想都转换为complex128
.
我立即看到了这个问题,即如果我希望我的库完全可靠,我必须寻找每种类型的组合并确定它们最窄的常见加宽类型(想想最不常见的多重类型).我不希望一切最广泛的类型可能转换,因为这很快成为记忆效率低下,而且我经常存储在内存中非常大的阵列.
有没有一种好方法可以确定两种NumPy类型之间最窄的常见加宽类型?
今天我试图连接两个IO字符串,但无法使它工作.
所以,问题是:假设我们拥有s1 :: IO String
和s2 :: IO String
.如何实现函数(+++) :: IO String -> IO String -> IO String
,它(++) :: [a] -> [a] -> [a]
与IO String 完全相同?
更一般的问题是如何实现更一般的功能(+++) :: IO a -> IO a -> IO a
?或者甚至更一般?
表示通过输入更新状态的最佳方法是什么?
我模拟物理系统.它有状态(坐标,速度).状态由模拟更新,该模拟从中获取一些参数(力)stdin
.结果stdout
在每个模拟循环后进行.
程序应在N个循环后停止.
我已经完成了readIORef
,writeIORef
但这很难看.
我已经定义了类似于一个类型的类型类,其中包含我的程序所需的一系列函数.遗憾的是,它需要多种多态类型,但并非这种多参数类型类的每个函数都需要每种类型.GHC困扰我不可挽救的类型,我无法运行代码.
一个简化的例子:
{-# LANGUAGE MultiParamTypeClasses #-}
class Foo a b where
-- ...
bar :: a -> ()
baz :: Foo a b => a -> ()
baz = bar
Run Code Online (Sandbox Code Playgroud)
GHC说
Possible fix: add a type signature that fixes these type variable(s)
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做b
?特别是当我想保持b
多态时.只有一个实例Foo
应该定义这种类型.
haskell ×7
python ×3
optimization ×2
algorithm ×1
function ×1
functor ×1
int ×1
list ×1
numpy ×1
performance ×1
python-2.7 ×1
semantics ×1
string ×1
syntax ×1
types ×1