Как добавить одномерные массивы на оси = 1 - PullRequest
1 голос
/ 28 мая 2019

Я приобретаю образцы размеров (2,1). Я пытаюсь сложить их в столбцы.

Я пробовал следующее:

# My initial state
state=np.array([2,3])
trajectory =state

# the following generate the next samples
class Buck:
  """ The following code simulates a Buck converter """
  def __init__(self,state,control):
    self.control=control
    self.state=state

  def Next_State(self):
    L, C = 1.0, 1.0
    R, G = 1.0, 1.0
    delta = 0.001


    Q = np.array([[-1.0/L,0.0],[0.0,1.0/C]])
    A = Q*np.matmul(Q,np.array([[R,1.0],[1.0,-G]]))

    next_state = state + delta*np.matmul(A,state)

    return next_state

# Here I am appending the new samples to trajectory

for i in range(100000):
  state=Buck.Next_State(state)
  np.append(trajectory,state,axis=1)

Это говорит о том, что я не могу преобразовать (2,) размерный массив в (2,2) размерный массив.

1 Ответ

1 голос
/ 28 мая 2019

state должен быть вектором столбца, чтобы умножение работало. В настоящее время это просто одномерный массив. Вы можете либо добавить одноэлементное измерение, либо сделать state 2D-массив из одной строки и транспонировать:

state=np.array([2,3])[:,None] 

OR

state=np.array([[2,3]]).T

Однако, если ваша задача - добавить все состояния к вашей траектории, вам нужно изменить еще две вещи:

  1. Вам необходимо сделать новую копию state до trajectory. Прямо сейчас вы предоставляете только срез, поэтому изменение trajectory также изменит state.

  2. np.append выводит вновь добавленный массив. Вы не фиксируете выходные данные метода, поэтому фактически ничего не добавляете.

Таким образом:

# My initial state
import numpy as np

state=np.array([2,3])[:,None] # Change
trajectory =state.copy() # Change

# the following generate the next samples
class Buck:
  """ The following code simulates a Buck converter """
  def __init__(self,state,control):
    self.control=control
    self.state=state

  def Next_State(self):
    L, C = 1.0, 1.0
    R, G = 1.0, 1.0
    delta = 0.001


    Q = np.array([[-1.0/L,0.0],[0.0,1.0/C]])
    A = Q*np.matmul(Q,np.array([[R,1.0],[1.0,-G]]))

    next_state = state + delta*np.matmul(A,state)

    return next_state

# Here I am appending the new samples to trajectory

for i in range(100000):
  state=Buck.Next_State(state)
  trajectory = np.append(trajectory,state,axis=1) # Change
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...