#python #python-3.x #numpy #matrix #numpy-ndarray
#python #python-3.x #numpy #матрица #numpy-ndarray
Вопрос:
Я пытаюсь использовать ffdiag
(pybss) из следующей функции :
def ffdiag(X, max_lag = 10, eps = 1.0e-10, max_iter = 100):
'''
Blind source separation using FFDIAG. This version does not require that
the estimated mixing matrix be orthogonal.
INPUT:
------
X : array, required
N_sig x t matrix of signal mixtures
max_lag : int, optional
maximum lag (in samples) for covariance matrix calculation
eps : double, optional
convergence criterion for matrix updates
max_iter : int, optional
maximum number of iterations/updates
'''
R_tau = linalg.lagged_covariance(X,max_lag)
dim = len(R_tau[0])
n_lags = len(R_tau.keys())
W = zeros((dim,dim))
V = eye(dim)
C = R_tau
niter = 0
theta = 0.9
iter_eps = 1.0
с lagged_covariance
определением :
def lagged_covariance(X, max_lag):
'''
Generates a dictionary of lagged covariance matrices of matrix X, for
lags 0,1,2,...,max_lag.
INPUT:
------
X : array, required
N x t data matrix
max_lag : integer, required
covariance matrices will be computed for lags 0,1,...,max_lag
OUTPUT:
------
R_tau : dictionary, keyed on the lag, with values equal to the lagged
covariance of X with the lagged version of itself.
'''
R_tau = {}
t = X.shape[1]
dim = X.shape[0]
R_tau[0] = cov(X,X)[0:dim,dim::]
for tau in range(1,max_lag 1):
for i in range(tau,t):
# create X(t) and X(t-tau)
X_t = X[:,0:t-tau]
Я получаю следующую ошибку :
/Users/henry/pybss/linalg.py", line 92, in lagged_covariance
R_tau[0] = cov(X,X)[0:dim,dim::]
File "<__array_function__ internals>", line 6, in cov
File "/opt/intel/intelpython3/lib/python3.7/site-packages/numpy/lib/function_base.py", line 2371, in cov
raise ValueError("m has more than 2 dimensions")
ValueError: m has more than 2 dimensions
В моем скрипте я вызываю ffdiag
так :
# dimension
m=7
# number of matrices
n=2
# Load spectro and WL GCph XC
FISH_GCsp = np.loadtxt('Fisher_GCsp_flat.txt')
FISH_XC = np.loadtxt('Fisher_XC_GCph_WL_flat.txt')
# Marginalizing over uncommon parameters between the two matrices
COV_GCsp_first = np.linalg.inv(FISH_GCsp)
COV_XC_first = np.linalg.inv(FISH_XC)
COV_GCsp = COV_GCsp_first[0:m,0:m]
COV_XC = COV_XC_first[0:m,0:m]
# Invert to get Fisher matrix
FISH_sp = np.linalg.inv(COV_GCsp)
FISH_xc = np.linalg.inv(COV_XC)
# Drawing a random set of commuting matrices
C=np.zeros((n,m,m));
B=np.zeros((n,m,m));
C[0,:,:] = np.array(FISH_sp)
C[1,:,:] = np.array(FISH_xc)
[invV, B, ut] = ffdiag(C, 10, 1.0e-10, 100)
но я не знаю C
, правильно ли определен массив: в любом случае мне нужно передать 2 матрицы размером 7×7, но в каком порядке :
# dimension
m=7
# number of matrices
n=2
C=np.zeros((n,m,m));
B=np.zeros((n,m,m));
или
C=np.zeros((m,m,n));
B=np.zeros((m,m,n));
или что-то еще, поскольку оба вышеперечисленных, похоже, не работают.
Как вы можете видеть в определении ffdiag, это замечено :
INPUT:
------
X : array, required
N_sig x t matrix of signal mixtures
Но я не могу догадаться, какая структура X array
.
Комментарии:
1. Обратите внимание, что мы предпочитаем технический стиль написания здесь. Мы мягко не поощряем приветствия, надеюсь, вы сможете помочь, спасибо, заранее благодарим, благодарственные записки, пожелания, добрые пожелания, подписи, пожалуйста, помогите, болтливый материал и сокращенный txtspk, мольбы, как долго вы застряли, советы для голосования, мета-комментарии и т. Д. Просто объясните свою проблему и покажите, что вы пробовали, чего ожидали и что на самом деле произошло.
2. В частности, в ваших вопросах есть «любая помощь приветствуется» в различных перестановках, несмотря на то, что теперь они были отредактированы из более чем 40 из них. Добровольцев, желающих поощрять техническое написание, и так слишком мало, и тысячи людей в день приходят, желая использовать Stack Overflow в качестве чата. Помилуй нас!