2014-09-03 47 views
1

我想解決一個「非常簡單」的問題。 Python中不是那麼簡單。鑑於大矩陣A和另一個較小的矩陣BI想B. 替代A的某些元素在Matlab軟件應該是這樣的:替換python中特定座標的矩陣元素

Given A, row_coord = [1,5,6] col_coord = [2,4], and a matrix B of size(3X2), A[row_coord, col_coord] = B 

在Python我試圖用product(row_coord, col_coord)itertools,產生該組所有需要在A中可訪問的索引,但它不起作用。所有關於子矩陣替換的例子都是以塊爲單位的row_coord = col_coord例子。除了http://comments.gmane.org/gmane.comp.python.numeric.general/11912似乎與我面臨的問題以及鏈接中的代碼不起作用有關外,沒有任何具體的內容。

注意:我知道我可以通過double for-loop實現我需要的東西,但是在我的數據中,這樣的循環爲一次迭代運行增加了9秒,我正在尋找更快的方法來實現這一點。

任何幫助將不勝感激。

+2

您能否提供一些示例矩陣和向量?他們不必非常大,只需測試就可以了。 – Ffisegydd 2014-09-03 12:37:43

+0

是的,當然:A = np.zeros([20,20])col_coord = [0,1,3] row_coord = [1,2] B = 1(讓B設爲常量)。解決這個問題的簡單方法是:對於in row_coord:for b in col_coord:A [row_coord [a],col_coord [b]] = 1,但我想通過使用intertools實用程序使其更快。 。( – user3861925 2014-09-03 13:06:31

回答

0

假設你使用的是numpy數組,那麼(在B是標量的情況下),下面的代碼應該可以將所選元素賦值爲B

itertools.product將創建所有的座標對我們然後將其轉換成numpy數組並使用索引你的原始數組:

import numpy as np 
from itertools import product 

A = np.zeros([20,20]) 

col_coord = [0,1,3] 
row_coord = [1,2] 

coords = np.array(list(product(row_coord, col_coord))) 

B = 1 

A[coords[:,0], coords[:,1]] = B 

我以前this excellent answer by unutbu工作,如何做索引。

+0

非常感謝!它可以根據需要使用,我直接使用A [product(row_coord,col_coord)],而不用強制轉換到列表和np.array中,它給了我Traceback(最近的調用最後): IndexError:索引必須是int或序列 – user3861925 2014-09-03 14:36:03

+0

很高興我可以幫忙:)如果你覺得我的答案對你有幫助,你可以[接受我的回答](http://meta.stackexchange。 COM /一個/204922分之5235)。 – Ffisegydd 2014-09-03 14:49:26

相關問題