0
import numpy as np
from itertools import product
N = 3
P = 13
A = np.random.random_sample((P, N))
heh = product(range(1,4), repeat=13)
mymat = np.array([letters for letters in heh], dtype=np.float)
for i in range(0,len(mymat)):
for j in range(0,(mymat.shape[1])):
if(mymat[i,j] == 1):
mymat[i,j] = A[j, 0]
if(mymat[i,j] == 2):
mymat[i,j] = A[j, 1]
if(mymat[i,j] == 3):
mymat[i, j] = A[j, 2]
ネストしたforループは最適ではなく、if文はおそらくほとんど悪いことがわかります。 私は、行インデックスに 'i'の代わりに ':'を使用しています。また、試してみました:条件に最も速い条件で要素を配列に挿入する
mymat[mymat[:,i]==1] = A[i,0]
それは私がちょうど使用Rに、しかし動作しませんでした:
a <- letters[1:3]
eg <- expand.grid(a,a,a,a,a,a,a,a,a,a,a,a,a)
for (i in 1:ncol(eg)) {
eg[,i] <- as.character(eg[,i])
eg[,i][eg[,i] == "a"] = mat[i,1]
eg[,i][eg[,i] == "b"] = mat[i,2]
eg[,i][eg[,i] == "c"] = mat[i,3]
eg[,i] <- as.numeric(eg[,i])
}
は、Pythonにそれを翻訳しようとしてきたが、ちょうどそれが十分に速く動作させることはできません。
入力の例と出力の例を明確にすることができますか(問題の簡略化されたバージョンを使用してください)。これは間違いなくnumpyで非常に扱いやすいもののようですが、私はその質問をあまり理解していません... – isosceleswheel