2016-03-22 18 views
-1

Sayısal bir şekil dizim var (4950,3). Bu diziden, değerleri ve endeksleri değerleri ve dizileri olan yeni dizi (matris) oluşturmam gerekiyor. mevcut dizi. Özelliklenumpy varolan diziden yeni 2B dizi oluştur, dizin değerleri olarak sütun değerleri

,

Dizi1 = array ([[0, 1, 0,4284256] [0, 2., 0,38090856] [1., 2., 0,32901526]]) .

new Array2 [0,1] = 0.4284256 , Array2[0,2]=0.38090856 and Array2[1,2]= 0.32901526 

Şimdi ben döngü için kullanmak, ama etkili bir yöntem olmalı düşünüyorum. A1 and A2 values

for i in range(A1.shape[0]): 
    A2[ A1[i,0], A1[i,1] ] = A1[i,2] 
+0

Ne yeni dizinin şekli olurdu? Array2'nizin baskı örneğini verir misiniz? Dizileri yeniden şekillendirmek mümkündür, ancak boyutlarla ilgili kurallar vardır. – armatita

+0

İlk 2 öğeyi * Array1 * öğesinde * Array2 * içindeki koordinatlarla eşlemek için gittiniz. Sanırım ** yeniden şekillendirmek ** burada size yardımcı olur. En iyi bahse girer, ya da daha kısa kod için * liste anlama * kullanın. – davidshen84

+1

Ama eğer bunu yapmak isterse, dizinin1'deki son satırın üçüncü öğesi neden dizi2'de 1,2 konumunda olur? Kural nedir? – armatita

cevap

0

bu aradığınız şey mi? Bir dizinin değerlerini, diğerlerinden Tamsayı değerleri kullanarak doğrudan dizine ekleyebilirsiniz.

import numpy as np 
Array1 = np.array([ [ 0.,1.,0.4284256 ], [0.,2.,0.38090856], [1., 2.,0.32901526] ]) 
Array2 = np.zeros(Array1.shape) 
Array2[np.int_(Array1[:,0]),np.int_(Array1[:,1])] = Array1[:,2] 
print(Array2) 

, sonucudur:

[[ 0.   0.4284256 0.38090856] 
[ 0.   0.   0.32901526] 
[ 0.   0.   0.  ]] 
+0

3'ten fazla satır varsa ur kodunun işe yaradığını sanmıyorum! Şimdi 3 sıradan beri çalışıyor. –

+0

Dizin oluşturma, herhangi bir sayıda satır için çalışır; yalnızca, endekslediğiniz öğelerin sayısının, atıfta bulunduğunuz değerlerin sayısı olduğundan emin olmanız gerekir. Talimatın iki tarafını da dizinleyebilirsiniz. – armatita