标签: matlab

如何在不首先将其分配给局部变量的情况下索引函数返回的MATLAB数组?

例如,如果我想从中读取中间值magic(5),我可以这样做:

M = magic(5);
value = M(3,3);
Run Code Online (Sandbox Code Playgroud)

得到value == 13.我希望能够做到这样的事情之一:

value = magic(5)(3,3);
value = (magic(5))(3,3);
Run Code Online (Sandbox Code Playgroud)

免除中间变量.然而,MATLAB抱怨Unbalanced or unexpected parenthesis or bracket在第一个括号之前3.

是否可以在不首先将其分配给变量的情况下从数组/矩阵中读取值?

indexing matlab matrix return-value variable-assignment

350
推荐指数
7
解决办法
7万
查看次数

用Python读取.mat文件

有没有人在Python中阅读二进制Matlab .mat文件的成功经验?

(我已经看到有人loadmat()声称支持读取.mat文件,但是我没有成功.我安装了loadmat()0.7.0版,我找不到loadmat()方法)

python file-io matlab scipy mat-file

344
推荐指数
10
解决办法
31万
查看次数

Octave和MATLAB之间的区别?

我是一名熟悉Python,Ruby和C的程序员,他们正试图决定是否学习GNU Octave或Matlab.我知道它们有很多共同点,但我不清楚语法是多么相似甚至数据结构.每个人都说他们"相似",但没有人说他们实际上是多么相似.上面的链接显示了几个在语法上相似或相同的例子,这对于整个语言是否正确?

我正在尝试学习一般语言以进行更多的科学计算,可能使用一些图像分析库.我知道我可以编写很多其他语言,但我的顾问说,了解MATLAB或Octave在科学中至关重要.

另外,Matlab值得花费吗?我没有很多钱,但如果图书馆或其他地方存在重大差异,我相信我能找到钱.

matlab octave

265
推荐指数
6
解决办法
22万
查看次数

代表和解决给定图像的迷宫

在给定图像的情况下,表示和解决迷宫的最佳方法是什么?

The Scope Issue 134的封面图片

给定一个JPEG图像(如上所示),读取它的最佳方法是什么,将其解析为一些数据结构并解决迷宫?我的第一直觉是逐像素地读取图像并将其存储在布尔值的列表(数组)中:True对于白色像素,False对于非白色像素(可以丢弃颜色).这种方法的问题是图像可能不是"像素完美".我只是说,如果墙上的某个地方有白色像素,可能会造成意想不到的路径.

另一种方法(经过深思熟虑后来找我)是将图像转换为SVG文件 - 这是在画布上绘制的路径列表.这样,路径可以被读入相同类型的列表(布尔值),其中True指示路径或墙,False指示可行进空间.如果转换不是100%准确,并且未完全连接所有墙壁,从而产生间隙,则会出现此方法的问题.

转换为SVG的另一个问题是线条不是"完美"直线.这导致路径是立方贝塞尔曲线.使用由整数索引的布尔值列表(数组),曲线不会轻易转移,并且必须计算曲线上所有的点,但不会与列表索引完全匹配.

我假设虽然这些方法中的一种可能有用(尽管可能不是),但鉴于这么大的图像,它们的效率非常低,并且存在更好的方法.如何最好(最有效和/或最简单)完成?有没有最好的方法?

然后是迷宫的解决方案.如果我使用前两种方法中的任何一种,我基本上会得到一个矩阵.根据这个答案,表示迷宫的好方法是使用树,解决它的好方法是使用A*算法.如何从图像中创建树?有任何想法吗?

TL; DR
最好的解析方法?进入什么数据结构?该结构将如何帮助/阻碍解决?

更新
我已经尝试过实现@Mikhail用Python编写的东西numpy,正如@Thomas推荐的那样.我觉得这个算法是正确的,但它没有像希望的那样工作.(下面的代码.)PNG库是PyPNG.

import png, numpy, Queue, operator, itertools

def is_white(coord, image):
  """ Returns whether (x, y) is approx. a white pixel."""
  a = True
  for i in xrange(3):
    if not a: break
    a = image[coord[1]][coord[0] * 3 + i] > 240
  return a

def bfs(s, e, i, visited):
  """ Perform a breadth-first search. …
Run Code Online (Sandbox Code Playgroud)

python algorithm matlab maze image-processing

258
推荐指数
8
解决办法
5万
查看次数

MATLAB中的xkcd样式图

xkcd风格的图形

因此,有才能的人已经想出了如何在Mathematica,LaTeX,PythonR中制作xkcd样式图.

如何使用MATLAB生成如上图所示的图?

我试过了什么

我创造了摇摆的线条,但我无法得到摇摆的轴.我想到的唯一解决方案是用摇摆的线覆盖它们,但我希望能够改变实际的轴.我也无法使幽默字体工作,使用的代码位是:

 annotation('textbox',[left+left/8 top+0.65*top 0.05525 0.065],...
'String',{'EMBARRASSMENT'},...
'FontSize',24,...
'FontName','Humor',...
'FitBoxToText','off',...
'LineStyle','none');
Run Code Online (Sandbox Code Playgroud)

对于摇摆不定的线,我尝试添加一个小的随机噪声和平滑:

 smooth(0.05*randn(size(x)),10)
Run Code Online (Sandbox Code Playgroud)

但是当它们交叉时,我无法使白色背景出现在它们周围......

matlab plot

218
推荐指数
4
解决办法
3万
查看次数

是否可以在MATLAB中为每个文件定义多个函数,并从该文件外部访问它们?

当我在EE攻读本科学位时,MATLAB要求每个函数都在自己的文件中定义,即使它是一个单行程序.

我现在正在攻读研究生学位,我必须在MATLAB中编写一个项目.这仍然是新版MATLAB的要求吗?

如果可以在文件中放置多个函数,是否有任何限制?例如,文件中的所有函数都可以从文件外部访问,还是只能从与文件同名的函数中访问?

注意:我使用的是MATLAB版本R2007b.

matlab scope file function function-declaration

209
推荐指数
5
解决办法
10万
查看次数

如何在MATLAB中获取变量的类型?

MATLAB是否有一个函数/运算符来指示变量的类型(类似于typeofJavaScript中的运算符)?

variables matlab types

184
推荐指数
5
解决办法
19万
查看次数

为什么MATLAB在矩阵乘法中如此之快?

我正在使用CUDA,C++,C#和Java进行一些基准测试,并使用MATLAB进行验证和矩阵生成.但是当我乘以MATLAB时,2048x2048甚至更大的矩阵几乎立即成倍增加.

             1024x1024   2048x2048   4096x4096
             ---------   ---------   ---------
CUDA C (ms)      43.11      391.05     3407.99
C++ (ms)       6137.10    64369.29   551390.93
C# (ms)       10509.00   300684.00  2527250.00
Java (ms)      9149.90    92562.28   838357.94
MATLAB (ms)      75.01      423.10     3133.90
Run Code Online (Sandbox Code Playgroud)

只有CUDA具有竞争力,但我认为至少C++会有点接近并且不会60x慢.

所以我的问题是 - MATLAB如何快速地完成它?

C++代码:

float temp = 0;
timer.start();
for(int j = 0; j < rozmer; j++)
{
    for (int k = 0; k < rozmer; k++)
    {
        temp = 0;
        for (int m = 0; m < rozmer; m++)
        {
            temp …
Run Code Online (Sandbox Code Playgroud)

performance matlab cuda matrix-multiplication

184
推荐指数
7
解决办法
5万
查看次数

在MATLAB中有一个foreach吗?如果是这样,如果基础数据发生变化,它的表现如何?

MATLAB中是否有foreach结构?如果是这样,如果基础数据发生变化(即对象是否添加到集合中)会发生什么?

syntax matlab

167
推荐指数
7
解决办法
16万
查看次数

在Matlab中使用i和j作为变量

i并且j是非常流行的变量名称(参见例如,这个问题这个).

例如,在循环中:

for i=1:10,
    % do something...
end
Run Code Online (Sandbox Code Playgroud)

作为矩阵的索引:

mat( i, j ) = 4;
Run Code Online (Sandbox Code Playgroud)

为什么不应该他们作为在Matlab的变量名?

variables matlab naming-conventions

138
推荐指数
6
解决办法
2万
查看次数