记录一次 shuffle(或者叫 permutation):
n = 10; randorder = randperm(n);
abs(A) == sqrt(A.^2) ⇒ sqrt(A.^2 + 1e-8)
disp(A)
:输出矩阵
1. batch(分块机制)
totnum = 1000;
batchsize = 100;
numbatch = totnum/batchsize;
numdim = 12;
testbatchdata = zeros(batchsize, numdim, numbatch);
% 三维矩阵保存全部的 batch 信息
size(testbatchdata)
% 100, 12, 10
按块访问:
for i = 1:numbatch,
data(1+(i-1)*batchsize:i*batchsize, :)
end
2. 双层循环
for epoch = 1:maxepoches,
...
for batch = 1:numbatches,
...
end
end
3. 统计一行中 0 的个数
>> A = randi([0, 1], 5, 10);
>> sum(A == 0, 2)
4. 随机地选择矩阵的某些行或者某些列
% 随机地选择某些行
>> A(randi(size(A, 1), k, 1), :)
% 随机地选择某些列
>> A(:, randi(size(A, 2), 1, k))
5. function(函数)允许传递空参进去
function [] = func(x, y, z)
...
end
客户端调用时:
func(x, [], z)
, 此时在函数 func
的内部将 y
识别为 empty
,而不是不存在,也即 isempty(y) == 1
(注意 func(x, , z)
是不合法的)。
6. 空参空返回值的函数
function [] = checkNumericalGradient()
空参空返回值,虽然保有函数的形式,更像是一段 demo,可直接 F5 运行。
7. 两向量无量纲的距离
diff = norm(numgrad-grad)/norm(numgrad+grad);
% 除是为了消除量纲
8. 形成犬牙相错的排列
1 5 2 6 3 7 4
使用 circshift,
n = 7;
a = zeros(1, n);
for i = 1:n,
a(i) = i;
a = circshift(a, [0, -1]);
end
a
此时要求长度必须为奇数,而不能为偶数,当长度为偶数时:
n = 1
a = 5 0 6 0 7 0 8 0