f
当使用?f
或通过REPL检查时,用户定义的函数(比如说)如何具有有意义的打印输出help(f)
例如,想象一下我写下面的函数
function f(x::Float64, y::Float64)
return 2x - y^2
end
Run Code Online (Sandbox Code Playgroud)
如果我把它加载到julia会话中并尝试help(f)
我得到以下内容:
julia> help(f)
f (generic function with 1 method)
Run Code Online (Sandbox Code Playgroud)
如果相反我想看到类似的东西怎么办?
julia> help(f)
f
Compute 2 times x minus y squared
Run Code Online (Sandbox Code Playgroud)
其中描述"计算2次x减y平方"的描述.我猜我的问题的答案可以从问题的答案中确定:"描述应该写在哪里?"
举例来说,如果我想在python中做同样的事情,我可以定义函数并将描述作为文档字符串:
def f(x, y):
"""
Compute 2 times x minus y squared
"""
return 2 * x - y ** 2
Run Code Online (Sandbox Code Playgroud)
当我输入help(f)
或f?
从IPython 时,这将使我的描述立即可用.
该SWIG文档解释了这两个指令如下:
%include
:"要包含其他文件到了一大口接口,使用%include
指令...不像,#include
,%include
包括每个文件一次(而不会重新加载后的文件%include
声明).因此,没有必要在痛饮接口,包括使用的得分后卫. ".
%import
:"SWIG提供了另一个带有%import
指令的文件包含指令......目的%import
是从另一个SWIG接口文件或头文件中收集某些信息,而不实际生成任何包装器代码.这些信息通常包括类型声明(例如,typedef)as以及可能用作接口中类声明的基类的C++类."
我的问题是这两个指令之间的区别是什么,使用每个指令的利弊是什么?
PS只是为了一些背景信息.我有一个简单的C++ - python扩展,当我使用上述任何一个指令时,它可以构建和工作.但是,%import
当我打电话时,()会给出较少的警告swig -c++ -python my_file.i
.
我有一个C++库,它定义了以下(更像它们)类型:
typedef std::vector< double > DoubleVec;
typedef std::vector< DoubleVec > DoubleVecVec;
typedef std::vector< int > IntVec;
typedef std::vector< IntVec > IntVecVec;
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个处理类似对象的库的python接口.正如标题所述,我希望我的界面能够转换为C++ std::vector
和numpy ndarray
.
我看到两个numpy.i
人都是由numpy人和std_vector.i
SWIG人提供的.问题是numpy.i
为处理C/C++数组(不是C++向量)而创建的,并且std_vector.i
不直接转换为numpy数组.
有任何想法吗?
我已经看到FEniCS项目已经做了类似的事情,但他们的项目非常庞大,以至于我很难找到他们如何完成这项具体任务.
想象一下,你有一个A
Float64类型的3维Julia数组size(A) = (2, 3, 3)
.
你如何使用二维数组一次分配这个数组的块?例如,假设我想A[1, :, :]
成为单位矩阵.我会想到做这样的事情:
A = Array(Float64, 2, 3, 3)
A[1, :, :] = eye(3)
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到以下错误:
ERROR: argument dimensions must match
in setindex! at array.jl:592
Run Code Online (Sandbox Code Playgroud)
我知道那是因为size(A[1, :, :]) = (1, 3, 3)
,但我无法弄清楚如何:1)获得此片是公正(3, 3)
那么eye(3)
适合或2)请eye(3)
也(1, 3, 3)
符合切片的形状A
.
有什么建议?
我学到了两件新东西:
A
沿着另外两个维度中的任何一个进行切片,则结果是二维数组而不是三维数组,其中前导维度为1.A[1, :, :] = reshape(eye(3), (1, 3, 3))
.这是次优的,我希望有一个更好的解决方案.我正在使用Julia(使用Jupyter笔记本的IJulia插件).如何在我的情节中正确显示unicode字符?
这是我的代码:
using PyPlot
? = linspace(-0.25, 1.25, 100);
f = (?.^2).*(1.0-?).^2;
figure(figsize=(8,5))
plot(?, f, color="purple", linewidth=1.8, linestyle="-")
xlabel("?")
ylabel("f(?)")
Run Code Online (Sandbox Code Playgroud)
但是,该图未正确显示unicode字符φ: