小编Gre*_*ack的帖子

如何“复制”矩阵而不在内存中创建导致内存溢出的临时矩阵?

通过将矩阵分配到更大的分配内存中,matlab 会在“复制”它时以某种方式复制它,如果要复制的矩阵足够大,则会出现内存溢出。这是示例代码:

main_mat=zeros(500,500,2000);
n=500;
slice_matrix=zeros(500,500,n);
for k=1:4
    parfor i=1:n
        slice_matrix(:,:,i)=gather(gpuArray(rand(500,500)));
    end
    main_mat(:,:,1+(k-1)*n:1+(k-1)*n+n-1)=slice_matrix; %This is where the memory will likely overflow
end
Run Code Online (Sandbox Code Playgroud)

有什么方法可以slice_matrixmain_mat没有开销的情况下“粉碎” ?提前致谢。

编辑:

main_mat预先分配时发生溢出。如果main_matmain_mat=zeros(500,500,1);(较小的尺寸)初始化,则不会发生溢出,但由于在将矩阵分配给它之前没有完成分配,它会减慢速度。随着范围的k增加,这将显着降低性能。

optimization matlab

9
推荐指数
1
解决办法
275
查看次数

在MATLAB中从2D矩阵中提取给定每行列索引的2D矩阵的元素

我试图从定义其索引的矩阵块重新采样我的数据.希望这个例子可以说清楚:

A=rand(18400,100);
A_IDX=randi([1 100],[18400 100]);
Run Code Online (Sandbox Code Playgroud)

A_IDX包括18400行和100列.我想AA_IDX索引处提取矩阵.结果将是这样的:

A=[1 2 3; 4 5 6];
A_IDX=[1 3; 2 3];
A_Result=[1 3; 5 6];
Run Code Online (Sandbox Code Playgroud)

我尝试A(:,A_IDX)但是这给了我1840x184000的矩阵大小,这不是我想要做的第一个.有人可以帮忙吗?提前致谢!

indexing matlab matrix

4
推荐指数
1
解决办法
120
查看次数

如何以块为单位动态重塑矩阵?

让我们说我有A = [1:8; 11:18; 21:28; 31:38; 41:48]现在我想将第4列的所有内容移动到行位置.我该如何实现这一目标?

A =
     1     2     3     4     5     6     7     8
    11    12    13    14    15    16    17    18
    21    22    23    24    25    26    27    28
    31    32    33    34    35    36    37    38
    41    42    43    44    45    46    47    48
Run Code Online (Sandbox Code Playgroud)

A2 =

     1     2     3     4    
    11    12    13    14    
    21    22    23    24    
    31    32    33    34    
    41    42    43    44    
     5     6     7     8
    15    16 …
Run Code Online (Sandbox Code Playgroud)

matlab matrix vectorization

3
推荐指数
1
解决办法
1016
查看次数

如何在不创建变量的情况下确定变量的大小?

那可能吗?假设我知道维度,我想确定变量占用多少字节,以便在进行计算之前可以采用适当的过程.经典方式:

A = zeros(500, 500, 500);
whos A;
Run Code Online (Sandbox Code Playgroud)

您可能建议在whos命令后删除变量,但如果MATLAB几乎达到了最大内存容量,则可能无效.有一种优雅的方式来做到这一点?

memory size matlab

3
推荐指数
1
解决办法
1081
查看次数

批处理:管道命令输出到变量并比较

我尝试将命令输出通过管道传输到变量,然后比较这些变量是否具有相同的值。但是它总是返回两个变量具有相同的值(即使不是)。下面是我的代码:

@echo off
goto main

:main
setlocal

echo 111 | (set /p readvalue= & set readvalue)
echo 123 | (set /p readvaluebash= & set readvaluebash)
if "%readvalue%"=="%readvaluebash%" goto valid
if NOT "%readvalue%"=="%readvaluebash%" goto invalid

:valid
echo yes
pause
goto finish

:invalid
echo no
pause
goto finish


:finish
endlocal
Run Code Online (Sandbox Code Playgroud)

我总是得到yes结果。有人知道我的错误吗?提前致谢!

batch-file

3
推荐指数
1
解决办法
4198
查看次数

在循环内显示图像时减少循环开销

我循环触发视频,利用其数据,并使用imshow. 外置摄像头有 30 fps,但是imshow在循环中使用时,它将帧速率大幅降低到 5-7 fps 左右。有解决方法吗?下面是片段:

Vid = videoinput('some_cam',1);
triggerconfig(Vid, 'manual');
Vid.FramesPerTrigger = 1;
Vid.TriggerRepeat = inf;
viewer = vision.DeployableVideoPlayer();

start(Vid);
himg = figure;
while ishandle(himg)
    trigger(Vid);
    [image, timeStamp] = getdata(Vid);
    imshow(image); %This line significantly reduce the performance
    %Do something with the images...This part is important and would need as many frame rate as possible
end
Run Code Online (Sandbox Code Playgroud)

所以我在想,如果我发送imshow到另一个线程上运行怎么办?但在这种情况下,我不知道该怎么做,因为我需要访问image. 预览或任何其他命令在我的情况下不起作用,因为我必须image事先进行一些更改。

matlab loops image matlab-figure

1
推荐指数
1
解决办法
68
查看次数