假设我使用Ipython笔记本对Scipy工厂进行了复杂的数值计算。现在,我想通过Javascript中的代码(仍然在IPYNB中)调用Scipy计算得到的变量。
以下是我愿意完成的事情的简单说明:
# Get a vector of 4 normal random numbers using numpy - the variable 'rnd'
import numpy as np
mu, sig = 0.05, 0.2
rnd = np.random.normal(loc=mu, scale=sig, size=4)
现在,我想在Javascript中使用上面的变量rnd
,用于说明目的:
%%javascript
element.append(rnd);
上面的行会返回一条消息错误:ReferenceError: rnd is not defined
。
那么,如何在Ipython Notebook中的javascript代码中使用python变量?
答案 0 :(得分:5)
使用%%Javascript
单元格法术可能无法做到这一点。但是,您可以使用IPython.display.Javascript(...)
方法将Python字符串注入浏览器
输出区域。这是对您的代码片段的修改,似乎可以回答您的问题。
from IPython.display import Javascript
import numpy as np
mu, sig = 0.05, 0.2
rnd = np.random.normal(loc=mu, scale=sig, size=4)
## Now, I want to use the variable rnd above in Javascript, for illustrative purpose:
javascript = 'element.append("{}");'.format(str(rnd))
Javascript(javascript)
将此代码粘贴到输入单元格中,每次执行单元格时都会生成一个新的不同数组 随机数将显示在输出单元格中。
(代码使用IPython 2.2版测试)
答案 1 :(得分:4)
任意Python(包括检索变量的值)都可以从IPython中的JavaScript端执行,尽管它有点乱。以下代码适用于IPython 3.1和Python 2.7:
%%javascript
IPython.notebook.kernel.execute(
"<PYTHON CODE TO EXECUTE HERE>",
{
iopub: {
output: function(response) {
// Print the return value of the Python code to the console
console.log(response.content.data["text/plain"]);
}
}
},
{
silent: false,
store_history: false,
stop_on_error: true
}
)