multidimensional-array - 如何用ndarray将矩阵乘以视图?
问题描述
使用ndarray。这个操场片段说明了一切——我想将矩阵视图元素与矩阵相乘,但我无法弄清楚视图和强制转换的组合以及其他可以使它工作的东西。
#![allow(unused)]
use ndarray::{Array1, Array2, Axis};
fn main () {
let bob = Array1::from(vec![1.2, 3.3, 4.]);
let ralph = Array2::from(vec![[3.3, 1.0, -2.0],[4., 5., 8.], [-9., 2., 1.]]);
println!("{:?}", ralph.index_axis(Axis(1), 0) * bob);
}
编译时出现错误:
error[E0369]: cannot multiply `ArrayBase<ViewRepr<&{float}>, Dim<[usize; 1]>>` by `ArrayBase<OwnedRepr<{float}>, Dim<[usize; 1]>>`
--> src/lib.rs:8:51
|
8 | println!("{:?}", ralph.index_axis(Axis(1), 0) * bob);
| ---------------------------- ^ --- ArrayBase<OwnedRepr<{float}>, Dim<[usize; 1]>>
| |
| ArrayBase<ViewRepr<&{float}>, Dim<[usize; 1]>>
有没有一种神奇的指环组合可以让它做我想做的事,还是我需要手工做?
解决方案
向乘法的两个元素添加 & 将防止在乘法过程中消耗任何一个值:
&ralph.index_axis(Axis(1), 0) * &bob
ndarray 文档中的以下链接解释了在二进制操作期间分配新数组与使用数组:https ://docs.rs/ndarray/0.14.0/ndarray/struct.ArrayBase.html#binary-operators-with-two-数组
我认为因为 index_axis() 的结果是另一个数组的视图,所以不能安全地使用它,因此出现错误
推荐阅读
- python - 如何使用 pytesseract 改进结果
- javascript - 使用按钮控制 iframe 宽度
- .net - 如何使 Entity Framework Core DbSet Take 和 Skip 采用 long 类型,而不是 int(我有超过 40 亿行)
- python - Python 输出未在 Visual Studio Code 中一次显示
- .net-core - 我设置了任何 CORS 设置,但在我的 ASP.NET Core 5 Web API 中不起作用
- php - 在所有控制器上应用会话检查后未显示登录页面
- heroku - 如何将heroku托管与godaddy域连接
- mips - 在 MIPS 中替换 %hi 和 %lo
- r - 正确指定“逻辑条件”(在 R 中)
- ios - 具有重复列表项的 TableViewController