替换Julia中数组中特定条目的值

时间:2019-06-13 15:23:13

标签: arrays indexing julia

我想知道如何有效地实现用特定值替换数组的某些条目的代码。换句话说,我有一个矩阵和一个带有逻辑条件成立的矩阵索引的向量。我想将这些条目更改为向量中具有的某些值。

到目前为止,我已经完成了一个循环,但是也许有更好的策略使用过滤或类似的方法。

一个小例子是:

>>> encode([3,13,7,8,3,2],[4,20,10,10,5,5])
184467
>>> decode(184467,[4,20,10,10,5,5])
[3, 13, 7, 8, 3, 2]

但是,我需要在一个非常密集的循环中使用更大的矩阵来执行此操作。我必须更改的索引始终相同,但是值的向量(B的对应项)在每次迭代中都会更改。

非常感谢!

1 个答案:

答案 0 :(得分:3)

您可以简单地写:

User

使用A = collect(1:8) B = [10,20] C = findall(A.<=2) A[C] = B 函数也可以重写为findall以减少分配数量。关键在于,C = findall(x -> x <= 2, A)保留实际索引比逻辑索引更好。从技术上讲,C也将接受A[C] = B中的逻辑索引,但是这样比较慢。并且假设C仅计算一次,而C被计算多次,则最好预先计算要使用的索引。

如果A[C] = B每次迭代都发生变化,那么最好先写C然后写C .= A .<= 2(注意,在这种情况下,我使用A[C] = B的步调更新)它会多次更新,因此速度更快)。您必须对特定情况下的基准进行基准测试。