我只是想为 Rust ndarray 进行基本数学运算(例如,sin、exp、log、sqrt ...)。但是,我没有从阅读 ndarray 的文档中找到任何有用的示例。
比如说:
extern crate ndarray;
use ndarray as nd;
fn main() {
let matrix = nd::array![[1., 2., 3.], [9., 8., 7.]];
let result = some_math(matrix);
println!("{}", result)
}
fn some_math(...) {
//Here I would like to do elementwise exp() and sqrt
sqrt(exp(...))
// Using f64::exp would fail.
}
Run Code Online (Sandbox Code Playgroud)
如何some_math
高效地实施?我当然可以通过循环矩阵的元素来执行元素操作,但这听起来不太好,我不想这样做。
在numpy
python 中,这就是np.sqrt(np.exp(matrix))
. 我的意思是 Rust 确实是一门很棒的语言,但是,即使是简单的代数也确实不方便(缺乏适当的生态系统)。
更新:有一个正在进行的ndarray拉取请求。如果这是接受的,那么你可以简单地做matrix.exp().sqrt()
等等。
ndarray-doc 中有一个非常隐藏的页面,告诉我们如何进行此类数学运算。
例如,我有一个张量A = tf.Variable([a, b, c, d, e])
,通过
tf.tile()
,它可以给张量[a, b, c, d, e, a, b, c, d, e]
但是我想A
改成类似:的形式[a, a, b, b, c, c, d, d, e]
,其中元素在原始位置重复。
(通过不同的操作)实现此目标的最有效方法(更少的操作)是什么?
我们知道我们可以tf.stop_gradient(B)
用来防止B
在反向传播中训练变量。但我不知道如何止损B
。
简单来说,假设我们的损失是:
loss = categorical_crossentropy + my_loss
B = tf.stop_gradient(B)
Run Code Online (Sandbox Code Playgroud)
其中既categorical_crossentropy
与my_loss
一切都取决于B
。所以,如果我们为 设置停止梯度B
,它们都将B
作为常数。
但是我如何只设置my_loss
停止渐变 wrt B
,categorical_crossentropy
保持不变?就像是B = tf.stop_gradient(B, myloss)
我的代码是:
my_loss = ...
B = tf.stop_gradient(B)
categorical_crossentropy = ...
loss = categorical_crossentropy + my_loss
Run Code Online (Sandbox Code Playgroud)
那行得通吗?或者,如何使它起作用?
好的,伙计们,如果 Q1 可以解决,我的最终任务是如何在自定义层中做到这一点?
说得具体,假设我们有一个自定义层,其中有训练的权重A
和B
和自我损失my_loss
只有这一层。
loss = categorical_crossentropy + my_loss
B = tf.stop_gradient(B)
Run Code Online (Sandbox Code Playgroud)
如何使w …
假设data
是一个大小为 的矩阵129 * 129
。
通过使用
mesh(data, 'FaceColor', 'none', 'EdgeColor', 'black')
我们得到类似的东西
我们可以发现网格相当密集。我想要相同的图形,但网格线数量较少,例如
data
例如,当然可以绘制较小的图data(1:10:end, 1:10:end)
。但这样一来,剧情就不再像以前那么准确了。
另一个例子是plot(..., 'MarkerIndices', ...)
。这可以为您提供标记数量较少的图,而无需修改图。https://www.mathworks.com/help/matlab/creating_plots/create-line-plot-with-markers.html
有一个字符串:
str = 'Please Contact Prof. Zheng Zhao: <a href="mailto:zheng.z@xxx.com">Zheng.Z@xxx.com</a> for details, or our HR: john.will@xxx.com'
Run Code Online (Sandbox Code Playgroud)
我想解析该字符串中的所有电子邮件,所以我设置:
p = r'[\w\.]+@[\w\.]+'
re.findall(p, str)
Run Code Online (Sandbox Code Playgroud)
结果是:
['zheng.z@xxx.com', 'Zheng.Z@xxx.com', 'john.will@xxx.com']
Run Code Online (Sandbox Code Playgroud)
显然,第一个和第二个是重复的。我们如何防止这种情况发生?
如果我们有一个数字
plot(x, y);
grid on;
Run Code Online (Sandbox Code Playgroud)
我们得到这样的东西
但是现在,我希望隐藏轴,所以我尝试了以下命令:
axis off
set(gca,'xtick',[])
set(gca,'ytick',[])
set(gca,'visible','off')
Run Code Online (Sandbox Code Playgroud)
他们一起成功地隐藏了轴,但是网格也被删除了!
set(gca, 'xticklabel', [])
可以隐藏标签,但不能隐藏轴。
所以,我怎么隐藏轴,刻度和标签,留下只有在情节和电网?
如果我有一个变量列表[A, B, C, D]
。我如何有效地找到哪个是None
?
我有
if None in (A, B, C, D):
ValueError("None found.")
Run Code Online (Sandbox Code Playgroud)
但是它仅测试其中是否没有None,并且无法找到它。我可以使用for
循环轻松找到它,但是请不要这样做...我需要的是
if None in (A, B, C, D):
# Find where is None
ValueError("None found in {?}.")
Run Code Online (Sandbox Code Playgroud) python ×4
matlab ×2
plot ×2
tensorflow ×2
expression ×1
figure ×1
hide ×1
keras ×1
mesh ×1
null ×1
rust ×1
rust-ndarray ×1