Discussão do artigo "Operações com Matrizes e Vetores em MQL5" - página 6

 
Rashid Umarov #:
Você precisa descansar e reler todas as suas perguntas nesta discussão amanhã.

Sua orientação ajudou, obrigado.

Mas agora ainda estou tendo dificuldades com as perguntas:

1. Preciso dividir uma matriz por um vetor - essa é uma tarefa típica para calcular porcentagens, quando há um total de cada linha/coluna e preciso saber a porcentagem de cada célula - muito exigido.

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(1);/Preencher a matriz com zeros

   vectorf Zero;
   Zero.Init(3);
   Zero.Fill(0);/Preencher a matriz com zeros

   Zero=Test/Zero;

Recebo um erro

cannot convert type 'vectorf' to type 'matrixf' Primer_02.mq5   325     11
cannot convert type 'matrixf' to type 'vectorf' Primer_02.mq5   325     10

Se você criar uma matriz a partir de um vetor, essencialmente duplicando colunas para restaurar o tamanho da matriz sobre a qual o cálculo é realizado, essa abordagem consome muita memória desnecessariamente. Extrair vetores de uma matriz em ciclos consome muitos recursos e não parece racional.

2) Às vezes, o divisor é zero, e então obtemos "-nan(ind)". - Talvez haja a possibilidade de obter zero ou outro valor forçado nesse caso, ou de não executar o cálculo nessa célula - por opção?

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(0);/Preencher a matriz com zeros

   float z=0;
   Test=Test/z;
   Print(Test);
2022.10.13 06:09:52.125 Primer_02 (EURUSD,H1)   [[-nan(ind),-nan(ind)]
2022.10.13 06:09:52.125 Primer_02 (EURUSD,H1)    [-nan(ind),-nan(ind)]
2022.10.13 06:09:52.125 Primer_02 (EURUSD,H1)    [-nan(ind),-nan(ind)]]
 
Aleksey Vyazmikin #:

Sua orientação ajudou, obrigado.

Mas agora ainda estou me perguntando:

1. Preciso dividir uma matriz por um vetor - essa é uma tarefa típica para calcular porcentagens, quando há uma soma total de cada linha/coluna e preciso saber a porcentagem de cada célula - muito exigida.

Recebo um erro


Você quer quebrar tudo. Vá mais longe você mesmo, não vou ajudá-lo mais - é difícil dar uma olhada nos exemplos

//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
void OnStart()
 {
//---
   matrixf m;
   m.Init(3,2);
   m.Fill(7);/Preencha a matriz com NON-ZEROs

   vectorf divider;
   divider.Init(2);
   divider.Fill(3);//Preencher o vetor com zeros NONE

   for(ulong i=0;i<m.Rows();i++)
     {
      m.Row(m.Row(i)/divider,i);
     }
   Print(m);  
 }
 
Rashid Umarov #:

Você tem o desejo de quebrar tudo. Você pode continuar a partir daqui, não vou ajudá-lo mais, é doloroso ver exemplos disso.

Acho que a sintaxe não vai)))))

 
Rashid Umarov #:

Você tem o desejo de quebrar tudo. Você pode continuar a partir daqui, não vou ajudá-lo mais, é doloroso ver exemplos disso.

Portanto, faça-o de forma mais confiável :)))))))

O exemplo está errado, eu preciso dividir cada coluna da matriz pelo valor correspondente na linha do vetor. Ou seja, o vetor deve representar uma coluna, não uma linha. Entendo que, então, preciso transpor a matriz..... Achei que isso fosse possível sem um loop.

E, é claro, estou muito interessado na resposta à segunda pergunta. Nem mesmo uma resposta, mas sim a possibilidade de colocar um zero na matriz final ao dividir por zero.

[Excluído]  
O homem já quebrou os catbusters, em breve não restará mais nada das matrizes)
 
Maxim Dmitrievsky #:
O homem já quebrou o catbuster, em breve não restará mais nada das matrizes)

Ao inserir informações falsas, você fortalece a declaração de uma pessoa respeitada nesse recurso, aparentemente tentando se apegar à autoridade dela e me colocar em maus lençóis,

Você tem algum ressentimento pessoal?

[Excluído]  
Aleksey Vyazmikin #:

Ao acrescentar informações falsas, você amplia a declaração de uma pessoa respeitada nesse recurso, aparentemente tentando se vincular à autoridade dela e me deixar mal visto,

Você tem algum ressentimento pessoal?

Acho que o humor ainda não foi banido.

 
Maxim Dmitrievsky #:

Acho que eles ainda não proibiram o humor.

Provavelmente é engraçado. Posso até supor a premissa real da declaração. No entanto, poucas pessoas entenderão do que estamos falando, se não forem frequentadores assíduos do tópico do MoD.

Você entende a nova sintaxe das matrizes, e eu sou o único que é tão ruim de raciocínio?

[Excluído]  
Aleksey Vyazmikin #:

Talvez seja engraçado. Posso até supor a premissa real da declaração. Entretanto, poucas pessoas entenderão do que se trata, a menos que sejam frequentadores assíduos do tópico do MoD.

Você entende a nova sintaxe das matrizes, e eu sou o único que é tão ruim de raciocínio?

Eu não a li, ela é implementada de forma diferente em todos os lugares, basta observar as peculiaridades.

Acho que tudo está claro, eu mesmo uso dataframes em python, e ele tem suas próprias especificidades.

 

Por favor, esclareça como copiar uma coluna de uma matriz para outra!

Não entendi o exemplo de cópia para vetor.

vector matrix::Col(
  const ulong   ncol      // número da coluna
   );
 
void matrix::Col(
  const vector  v,        // vetor de colunas
  const ulong   ncol      // número da coluna
   );

Aqui está um trecho do meu código

   for(P=0; P<Type_Q_Perebor; P++)
   {
      matrixf m_Data_calc;/Matriz com tabela para cálculos
      vectorf V_Data_calc;//Vetor para transferência de matriz para matriz
      switch(P)
      {
      case 0:
         m_Data_calc.Init(Strok_Total_Data*N_1, 1);//Inicializar a matriz
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);//Melhorar o tamanho da matriz com os dados
         break;
      case 1:
         m_Data_calc.Init(Strok_Total_Data*N_0, 1);//Inicializar a matriz
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);//Melhorar o tamanho da matriz com os dados
         break;
      }

      V_Data_calc.Cov(m_Data_calc,0);//Copiar o vetor coluna da matriz
      m_Data_calc.Col(V_Data_calc,0);//Copiar o vetor coluna para a matriz
   }

Recebo um erro

'Cov' - wrong parameters count  Tree_Analiz_Bi_V_2_4.mq5        219     19
   built-in: matrixf vectorf:Cov(const vectorf&)        Tree_Analiz_Bi_V_2_4.mq5        219     19