Массив матриц в MATLAB

Существует множество способов предотвращения SQL-инъекций и других SQL-хаков. Вы можете легко найти его в Интернете (Google Search). Конечно, PDO - одно из хороших решений. Но я хотел бы предложить вам некоторые хорошие ссылки с помощью SQL Injection.

Что такое SQL-инъекция и как предотвратить

Руководство PHP для SQL-инъекция

Microsoft объяснение SQL-инъекции и предотвращения в PHP

и некоторые другие, подобные Предотвращение SQL-инъекций с MySQL и PHP

Теперь, почему вам нужно предотвратить запрос из SQL-инъекции?

Я хотел бы сообщить вам: почему мы пытаемся предотвратить SQL-инъекцию с помощью Ниже приведен короткий пример:

Запрос для проверки подлинности входа:

$query="select * from users where email='".$_POST['email']."' and password='".$_POST['password']."' ";

Теперь, если кто-то (хакер) помещает

$_POST['email']= admin@emali.com' OR '1=1

и пароль что-либо ....

Запрос будет анализироваться в системе только до:

$query="select * from users where email='admin@emali.com' OR '1=1';

Другая часть будет отброшена. Итак, что будет? Неавторизованный пользователь (хакер) сможет войти в систему как администратор без своего пароля. Теперь он может делать все, что может сделать администратор / адрес электронной почты. См., Очень опасно, если SQL-инъекция не предотвращается.

39
задан rayryeng - Reinstate Monica 2 May 2017 в 19:56
поделиться

5 ответов

Если все матрицы будут тем же размером (т.е. 500x800), то можно просто сделать 3D массив:

nUnknown;  % The number of unknown arrays
myArray = zeros(500,800,nUnknown);

Для доступа к одному массиву Вы использовали бы следующий синтаксис:

subMatrix = myArray(:,:,3);  % Gets the third matrix

можно добавить больше матриц к myArray несколькими способами:

myArray = cat(3,myArray,zeros(500,800));
% OR
myArray(:,:,nUnknown+1) = zeros(500,800);

, Если бы каждая матрица не будет тем же размером, необходимо было бы использовать массивы ячеек как предложенный Hosam.

РЕДАКТИРОВАНИЕ: Я пропустил часть об исчерпывании памяти. Я предполагаю, что Ваш nUnknown является довольно большим. Вам, вероятно, придется переключить тип данных матриц (единственный или даже тип uintXX при использовании целых чисел). Можно сделать это в вызове к нулям:

myArray = zeros(500,800,nUnknown,'single');
44
ответ дан gnovice 27 November 2019 в 02:10
поделиться

Используйте массивы ячеек. Это имеет преимущество перед 3D массивами, в которых это не требует непрерывное пространство памяти хранить все матрицы. На самом деле каждая матрица может быть сохранена в различном пространстве в памяти, которая сохранит Вас от ошибок Из памяти, если Ваша свободная память будет фрагментирована. Вот демонстрационная функция для создания матриц в массиве ячеек:

function result = createArrays(nArrays, arraySize)
    result = cell(1, nArrays);
    for i = 1 : nArrays
        result{i} = zeros(arraySize);
    end
end

Для использования его:

myArray = createArrays(requiredNumberOfArrays, [500 800]);

И получить доступ к Вашим элементам:

myArray{1}(2,3) = 10;

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

myArray{1} = zeros(500, 800);
if twoRequired, myArray{2} = zeros(500, 800); end
71
ответ дан Hosam Aly 27 November 2019 в 02:10
поделиться
myArrayOfMatrices = zeros(unknown,500,800);

, Если Вы заканчиваетесь бросок памяти больше RAM в Вашей системе и удостоверяетесь, что выполняете ОС на 64 бита. Также попытайтесь уменьшить свою точность (сделайте Вас, действительно нуждаются, удваивается, или можно ли обойтись одиночными играми?):

myArrayOfMatrices = zeros(unknown,500,800,'single');

Для добавления к той попытке массива:

myArrayOfMatrices(unknown+1,:,:) = zeros(500,800);
1
ответ дан Cris Luengo 27 November 2019 в 02:10
поделиться

Я делал некоторую объемную визуализацию в октаве (matlab клон) и создавал мои 3D массивы (т.е. массив 2-х частей) использование

buffer=zeros(1,512*512*512,"uint16");
vol=reshape(buffer,512,512,512);

, Потребление памяти, казалось, было эффективно. (не может сказать то же для последующей скорости вычислений:^)

0
ответ дан timday 27 November 2019 в 02:10
поделиться

если Вы знаете, какой неизвестный,

можно сделать что-то как

myArray = zeros(2,2);
for i: 1:unknown
  myArray(:,i) = zeros(x,y);
end

Однако, это было некоторое время, так как я в последний раз использовал matlab., таким образом, эта страница могла бы пролить некоторый свет на вопрос:

http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/matlab_prog/f1-86528.html

-2
ответ дан Rocco 27 November 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: