首页 > 解决方案 > 根据条件为 Julia 矩阵赋值

问题描述

A我有一个具有维度的零矩阵(m x n)。我有一些整数值的另一个矩阵bb有长度n。我希望在任何值大于 5 的地方都设置为标识。所以基本上,对于值大于 5 的每一行,A将其设置为标识。bAb

我试图这样做,但它不起作用。有谁知道如何在 Julia 中做到这一点?

using LinearAlgebra
usable_values = filter((x) -> x > 5, b)
# A[:, usable_values] = I
A[:, b .> 5] = I

标签: julia

解决方案


我不确定我理解“设置为单位”是什么意思:单位矩阵必须是正方形,因此矩阵的行或列不能等于单位矩阵。我将在您希望条目具有值 1 的假设下进行操作。在这种情况下,

A[:, findall(b .> 5)] .= 1

是一个简单的单线。让我们在这里讨论元素:

  • 如上所述,filter将选择b大于 5 的元素。但您需要这些元素的索引,这findall是适当的功能。
  • 注意广播分配的使用,.=. 这意味着将 RHS 分配给左侧的每个元素。这样您就不需要在 RHS 上创建矩阵。

循环方法也很好,但出于性能原因,我将它放在一个函数中。请参阅性能提示


推荐阅读