Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据条件为Julia矩阵赋值_Julia - Fatal编程技术网

根据条件为Julia矩阵赋值

根据条件为Julia矩阵赋值,julia,Julia,我有一个零矩阵a,它的维数(mxn)。我有另一个整数值矩阵bb具有长度n。我想将A设置为b值大于5的标识。因此基本上,对于A中b值大于5的每一行,将其设置为标识 我试过这么做,但没用。有人知道如何在朱莉娅身上做到这一点吗 using LinearAlgebra usable_values = filter((x) -> x > 5, b) # A[:, usable_values] = I A[:, b .> 5] = I 如果您需要的是A的每一行,其中b的值大于5,请将其设

我有一个零矩阵
a
,它的维数
(mxn)
。我有另一个整数值矩阵
b
<代码>b具有长度
n
。我想将
A
设置为
b
值大于5的标识。因此基本上,对于
A
b
值大于5的每一行,将其设置为标识

我试过这么做,但没用。有人知道如何在朱莉娅身上做到这一点吗

using LinearAlgebra
usable_values = filter((x) -> x > 5, b)
# A[:, usable_values] = I
A[:, b .> 5] = I
如果您需要的是A的每一行,其中b的值大于5,请将其设置为标识,这可能会对您有所帮助,同时等待这里的一些大师可以在一行代码中编写相同的代码:)

我得到的结果是:

b = [4, 2, 6, 8, 1]

5×2 Array{Float64,2}:
0.0  0.0
0.0  0.0
1.0  1.0
1.0  1.0
0.0  0.0

我对这门语言相当陌生,目前这是我能做的最好的帮助。

我不确定我是否理解你所说的“设置为单位”的意思:单位矩阵必须是正方形,因此矩阵的行或列不能等于单位矩阵。我将假设您希望条目的值为1。那么,

A[:, findall(b .> 5)] .= 1
这是一个简单的单行程序。让我们在这里讨论这些要素:

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

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

A[:,b.>5].=I
?注意等号前的点。对于第一种方法,使用
findall
代替
filter
,后者返回满足条件的索引@张实唯 它给了我一个错误:
MethodError:没有匹配长度的方法(::UniformScaling{Bool})
很抱歉太懒了,无法提供完整的工作示例,但幸运的是,Thoy:)请看他很长的答案。是的,从技术上讲,这是可行的,但我希望有更多类似Julia的东西。不过我给了你一票。我知道你的意思!:)
A[:, findall(b .> 5)] .= 1