我想知道如何有效地实现用特定值替换数组的某些条目的代码。换句话说,我有一个矩阵和一个带有逻辑条件成立的矩阵索引的向量。我想将这些条目更改为向量中具有的某些值。
到目前为止,我已经完成了一个循环,但是也许有更好的策略使用过滤或类似的方法。
一个小例子是:
>>> 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的对应项)在每次迭代中都会更改。
非常感谢!
答案 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
的步调更新)它会多次更新,因此速度更快)。您必须对特定情况下的基准进行基准测试。