我刚安装了Anaconda并运行Spyder我找不到Object Inspector.按Ctrl + I无效,在View/Panes菜单中没有项目Object Inspector.
我已经看过显示Object Inspector的视频和教程.怎么了?
以下代码显示使用包含序列表达式for生成序列比使用生成相同序列快约五倍Seq.init.
open System
let rand count =
let rnd = Random() // if this value is not created all numbers are equal
seq {for i in 0..(count - 1) -> rnd.NextDouble()}
/// Perhaps more "functional" than rand but slower
let rand2 count =
let rnd = Random()
let rnd2 (i: int) = rnd.NextDouble()
Seq.init count rnd2
> rand 1000000 |> List.ofSeq |> List.head;;
Real: 00:00:00.092, CPU: 00:00:00.093, GC gen0: 3, gen1: 2, gen2: 0
val it …Run Code Online (Sandbox Code Playgroud) 我使用逆时针运行REPL,但我也注意到了Leiningen.
我可以调用def来定义var两次.例如,
=> (def a 1)
#'fractal.core/a
=> a
1
=> (def a 2)
#'fractal.core/a
=> a
2
Run Code Online (Sandbox Code Playgroud)
Clojure是一种函数式编程语言,在FP对象中应该是不可变的.如果我能在什么意义上做到这一点是不可改变的?
谢谢你的评论.
Numba似乎是加速数字代码执行的绝佳解决方案.但是,当有数组赋值时,Numba似乎比标准Python代码慢.考虑这个例子比较四个替代方案,有/无Numba,写入数组/标量:
(计算保持非常简单,专注于问题,即分配给标量与分配到数组单元格)
@autojit
def fast_sum_arr(arr):
z = arr.copy()
M = len(arr)
for i in range(M):
z[i] += arr[i]
return z
def sum_arr(arr):
z = arr.copy()
M = len(arr)
for i in range(M):
z[i] += arr[i]
return z
@autojit
def fast_sum_sclr(arr):
z = 0
M = len(arr)
for i in range(M):
z += arr[i]
return z
def sum_sclr(arr):
z = 0
M = len(arr)
for i in range(M):
z += arr[i]
return z
Run Code Online (Sandbox Code Playgroud)
使用IPython的%timeit来评估我得到的四个替代方案:
In [125]: %timeit fast_sum_arr(arr)
100 loops, best …Run Code Online (Sandbox Code Playgroud) 我的S4类有一个多次调用的方法.我注意到执行时间比独立调用类似函数时要慢得多.所以我在我的类中添加了一个带有"function"类型的插槽,并使用该函数而不是方法.下面的示例显示了两种执行此操作的方法,它们都比相应的方法运行得快得多.此外,该示例表明该方法的较低速度不是由于必须从类中检索数据的方法,因为即使它们也这样做,功能也更快.
当然,这种做事方式并不理想.我想知道是否有办法加速方法调度.有什么建议?
setClass(Class = "SpeedTest",
representation = representation(
x = "numeric",
foo1 = "function",
foo2 = "function"
)
)
speedTest <- function(n) {
new("SpeedTest",
x = rnorm(n),
foo1 = function(z) sqrt(abs(z)),
foo2 = function() {}
)
}
setGeneric(
name = "method.foo",
def = function(object) {standardGeneric("method.foo")}
)
setMethod(
f = "method.foo",
signature = "SpeedTest",
definition = function(object) {
sqrt(abs(object@x))
}
)
setGeneric(
name = "create.foo2",
def = function(object) {standardGeneric("create.foo2")}
)
setMethod(
f = "create.foo2",
signature = "SpeedTest",
definition = function(object) { …Run Code Online (Sandbox Code Playgroud) 我想连接两个 pandas DataFrame 而不复制数据。也就是说,我希望连接的 DataFrame 成为两个原始 DataFrame 中数据的视图。我尝试使用 concat() 但不起作用。此代码块显示更改基础数据会影响连接的两个 DataFrame,但不会影响连接的 DataFrame:
arr = np.random.randn(12).reshape(6, 2)
df = pd.DataFrame(arr, columns = ('VALE5', 'PETR4'), index = dates)
arr2 = np.random.randn(12).reshape(6, 2)
df2 = pd.DataFrame(arr, columns = ('AMBV3', 'BBDC4'), index = dates)
df_concat = pd.concat(dict(A = df, B = df2),axis=1)
pp(df)
pp(df_concat)
arr[0, 0] = 9999999.99
pp(df)
pp(df_concat)
Run Code Online (Sandbox Code Playgroud)
这是最后五行的输出。为 arr[0, 0] 分配新值后 df 发生变化;df_concat 不受影响。
In [56]: pp(df)
VALE5 PETR4
2013-01-01 -0.557180 0.170073
2013-01-02 -0.975797 0.763136
2013-01-03 -0.913254 1.042521
2013-01-04 -1.973013 -2.069460 …Run Code Online (Sandbox Code Playgroud) 我2017年昨天下载了新的VS和它工作正常,但我收到的每一行,我调用静态方法这个警告Frame.ReadCsv从Deedle包:
FS10001 This method is not intended for use from F#
Run Code Online (Sandbox Code Playgroud)
调用其他静态方法Frame.X不会生成相同的警告.
示例 - 此行代码生成警告:
let msft =
Frame.ReadCsv(Config.tsDir + "MSFT.csv",
hasHeaders=true,
inferTypes=true)
Run Code Online (Sandbox Code Playgroud)
Intellisense识别该方法并提供适当的提示,这些提示完全符合签名 http://bluemountaincapital.github.io/Deedle/reference/deedle-frame.html
下面的代码表明,pandas可能比numpy慢得多,至少在函数clip()的特定情况下.令人惊讶的是,从熊猫到numpy和回到熊猫的往返,同时在numpy中进行计算,仍然比在熊猫中做得快得多.
大熊猫的功能难道不应该以这种迂回方式实施吗?
In [49]: arr = np.random.randn(1000, 1000)
In [50]: df=pd.DataFrame(arr)
In [51]: %timeit np.clip(arr, 0, None)
100 loops, best of 3: 8.18 ms per loop
In [52]: %timeit df.clip_lower(0)
1 loops, best of 3: 344 ms per loop
In [53]: %timeit pd.DataFrame(np.clip(df.values, 0, None))
100 loops, best of 3: 8.4 ms per loop
Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用 Rust 和 VSCode。
如果我点击F1并选择Tasks: Run Task,我会看到任务列表。如果我选择该Run: cargo run任务并点击Enter,它将在终端中执行。
因此需要敲击三个按键。有没有一种方法可以分配快捷键,以便通过一次按键即可完成此操作?
观察:Ctrl++使出现两个项目Shift的B列表:Rust: cargo build和Rust: cargo check。
Python类有一个名为init的初始化方法.初始化程序通常会接受多个复制到同名属性的参数.
def __init__(self, a, b, c, d):
self.a = a
self.b = b
self.c = c
self.d = d
Run Code Online (Sandbox Code Playgroud)
这是很多工作,对我来说感觉"unpythonic".有没有办法自动化这个过程?
我想也许沿着这些方面的东西(下面的伪代码)可以工作:
for x in __init__.argument_names:
exec('self.' + x + ' = ' + x)
Run Code Online (Sandbox Code Playgroud)
我知道用这种方式调用exec不是好习惯.但也许Python开发团队已经创建了一种安全且等效的自动执行此任务的方法.
有什么建议?
FS