Я новичок. У меня проблемы. У меня есть 20 (1x100) векторов с разными именами. Я хочу объединить эти векторы, чтобы создать матрицу 20x100 с циклом for. Есть примеры векторов.

namelist=["First","B","New"]
First = [1:100]
B = [1:2:200]
New = [4:4:400]
for i = 1: length(namelist)
    new_database(i,1:end) = namelist{i}
end

Но когда я хотел попробовать это, я увидел: «Конечный оператор должен использоваться в выражении индекса массива». ошибка. Я знаю, что могу сделать то же самое с этим: "new_database = [First; B; New]"

Но я хочу сделать это с помощью цикла for. Не могли бы вы мне помочь, как исправить эту ошибку? или не могли бы вы объяснить мне, как это сделать?

0
Mert Doğan 15 Сен 2021 в 16:23

2 ответа

Лучший ответ

Ваша проблема с этой строкой:

new_database(i,1:end) = namelist{i}

Фигурные скобки используются исключительно с ячейками, и нет необходимости использовать индексирование диапазона, как вы это делаете (i, 1: end)

Как правило, лучше назначать ячейкам символьные массивы или строки.

Один вопрос, что вы делаете с массивами диапазонов «Первый», «Новый» и «Б»?

Что-то типа:

namelist=["First","B","New"]

First = [1:100];
B = [1:2:200];
New = [4:4:400];

new_database = cell(1, length(namelist));

for i = 1: length(namelist)   % or length(new_database)
    new_database{i} = namelist(i)
end

Который генерирует этот вывод:

enter image description here

РЕДАКТИРОВАТЬ: Мои извинения, теперь я вижу, чего вы пытаетесь достичь. Вы строите базу данных из серии массивов, верно?

Следуя моему предыдущему ответу, вы должны учесть некоторые моменты:

1 Ваша new_database должна быть квадратной. Независимо от размеров массивов, которые вы ему передаете, если вы формируете из них ячейку, у вас всегда будут пустые ячейки, если в эти строки или столбцы не передаются данные.

2 В некоторых случаях вам не нужно использовать циклы for, где простая индексация может быть достаточной для вашей задачи. Рассмотрим следующий пример с использованием cellstr:

titles = ["Position", "Fruits", "Mythical creatures"] 
A = ["One", "Two", "Three"];
B = ["Apple", "Banana", "Durian"];
C = ["Dragon", "Cat", "Hamster"];

db = cell(4, 3);

db(1,:) = cellstr(titles)
db(2:end,1) = cellstr(A)
db(2:end,2) = cellstr(B)
db(2:end,3) = cellstr(C)

Который генерирует этот вывод:

enter image description here

0
Daniel Melendrez 16 Сен 2021 в 10:50

Причина появления «Конечный оператор должен использоваться в выражении индекса массива». в том, что ваша переменная new_database еще не инициализирована. Вы должны создать пустую переменную перед циклом for. Вы также должны использовать eval, если хотите сделать это, как описано.

new_database = []
for i = 1: length(namelist)
    new_database(i,:) = eval(namelist{i})
end
-1
Viktor Világos 15 Сен 2021 в 21:48