Заявление о данных для матриц

Я хочу использовать оператор данных для инициализации матриц в Фортране. На мой взгляд, одним из преимуществ использования этого метода является то, что он обеспечивает компактный способ инициализации матриц. Однако то, как я использовал его в приведенном ниже примере, привело к ошибке в расчетах. И Z1, и ZZ1 должны давать матрицу размера 2x1, равную [7;13] (ZZ1 = [7;13], Z1 = [10;12]). Я считаю, что следует использовать такую ​​опцию, как order=(/2,1/), но я не смог ее найти. Кто-нибудь может помочь?

program test_Multiplication
  implicit none
  integer :: Xp1(3,1), b1(2,1), IW1_1(2,3), Z1(2,1)
  integer :: XXp1(3,1), bb1(2,1), IIW1_1(2,3), ZZ1(2,1)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  ! with data statement !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  data Xp1(1:3,1) &
  /1, &
   2, &
   3/
  data IW1_1(1:2,1:3) &
  /1, 1, 1, &
   2, 2, 2/
  data b1(1:2,1) &
  /1, &
   1/
  
  Z1 = matmul(IW1_1,Xp1)+b1
  print*, 'Z1', Z1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  ! without data statement !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  XXp1 = reshape( (/1, &
   2, &
   3 /), &
   shape(XXp1), order=(/2,1/) )
  
  IIW1_1 = reshape( (/ 1, 1, 1, &
   2, 2, 2/), &
   shape(IIW1_1), order=(/2,1/) )
  
  bb1 = reshape( (/1, &
   1/), &
   shape(bb1), order=(/2,1/) )

  ZZ1 = matmul(IIW1_1,XXp1)+bb1
  print*, 'ZZ1', ZZ1

end program test_Multiplication 

Вы должны добавить тег, указывающий на язык программирования. Фортран?

Axel Kemper 17.02.2023 00:36

Да, Фортран. Добавлен.

user790082 17.02.2023 00:38

Fortran является основным языком столбцов. PS: я чуть не пропустил ответ на ваш вопрос из-за чрезмерного использования продолжения строки. Это затрудняет разбор кода.

steve 17.02.2023 03:41

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

Vladimir F Героям слава 17.02.2023 08:06

Зачем вам отчет о данных? Таковы 1970-е. Просто используйте инициализацию, если вы хотите сделать что-то подобное, при условии, что вы понимаете последствия неявного Save (который применяется к обоим методам)

Ian Bush 17.02.2023 08:42
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
5
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

@user790082,

Стив уже дал ваш ответ в качестве комментария (Fortran использует порядок столбцов: первый индекс изменяется быстрее всего в памяти). Если вы должны использовать оператор данных, измените инициализацию IW1_1 на

  data IW1_1(1:2,1:3) /1, 2, 1, 2, 1, 2 /

(В этом случае продолжение строки является значительным отвлечением.)

Другие вопросы по теме