当我imread在MATLAB中使用并读取图像时,我如何知道它是RGB,灰度还是单个编程?
I1 = imread('sample_image.jpg');
Run Code Online (Sandbox Code Playgroud)
如何I1在转换之前知道什么类型?
我已经用4种不同的方式写下了一个函数,我想给它计时.
到目前为止我一直在做这件事:
tic
%//function 1
toc
tic
%//function 2
toc
tic
%//function 3
toc
tic
%//function 4
toc
Run Code Online (Sandbox Code Playgroud)
但现在我想计算每个函数的时序数据(比如说100次),然后计算每个函数花费的平均时间.我怎么能这样做?
另外我在某处读到打印的时间是经过的"挂钟"时间 - 所以当MATLAB程序运行时,它会受到我的计算机正在做的其他事情的影响.
这样做有更好的方法吗?我听说有一个MATLAB内置的代码分析器,命令为"profile on".请问有人可以建议我使用它的方式吗?
我还咨询了这些站点:MATLAB和Profiler中的时序代码,以查找代码瓶颈.
请建议如何在循环中多次执行此操作.提前致谢.
编辑:2013年9月23日:按照每个人的建议我这样做:我的功能被定义为一,二,三和四.
tic
%//function 1
toc
tic
%//function 2
toc
tic
%//function 3
toc
tic
%//function 4
toc
Run Code Online (Sandbox Code Playgroud)
然后我运行了这个程序并得到了这个时间:
tic
%//function 1
toc
tic
%//function 2
toc
tic
%//function 3
toc
tic
%//function 4
toc
Run Code Online (Sandbox Code Playgroud)
我得到的时间是:
tic
%//function 1
toc
tic
%//function 2
toc
tic
%//function 3
toc
tic …Run Code Online (Sandbox Code Playgroud) 我的问题是打开由Dymola生成的som*.mat文件.对于小型模式,有时候matlab打开创建的*.mat文件没有问题.然后我可以看到工作区中的结构.但我还有一个巨大的模拟模型,有31.536.000个数据点.对于这种模式,Matlab无法打开它.我总是得到提示
Error using load
Unable to read MAT-file C:\Users\Patrick\Desktop\DymolaWork\GridHH_SLP.mat
File may be corrupt.
Run Code Online (Sandbox Code Playgroud)
我的Matlab版本是2014a 64bit,我的Dymola版本是2014 FD001 64bit.我还尝试使用mathworks主页上提供的工具解决问题,以解决损坏的变量名称(loadfixnames/savebadnames).但这并不是很好.因为此工具无法恢复矩阵data_2.任何人都可以给我一个解决这个问题的建议.非常感谢你
我想在 CLion 中而不是在 MATLAB 中编译 MEX 文件(MATLAB 可执行文件)(这对编写 C 代码没有帮助)。但是,MEX 文件需要 #include mex.h(pp),这在普通 C++ 中不可用。而且,没有main功能的格式是不同的。
我正在使用 MATLAB R2018b 并希望使用 C++11 使用新的 C++ API for MEX-files。但是,我也可以使用旧的 API。
我试过查看CMake 的 FindMatlab 模块和其他几个位置。然而,大多数其他指南已经过时,甚至它们的参考链接也无法连接到它们的原始页面。
我是 CMake 的绝对新手,我不知道从哪里开始。
我目前无法使用#include "mex.h",#include "mex.hpp",#include "mexAdapter.hpp"等我也无法整理的功能没有main功能。
非常感谢任何可以通过上传或描述CMakeLists.txt必要文件来提供帮助的人 。
我正在尝试编写一个获取A任意大小矩阵的程序,并且SVD将其分解:
A = U * S * V'
Run Code Online (Sandbox Code Playgroud)
A用户输入的矩阵在哪里,U正交矩阵由特征值的特征向量组成A * A',S是奇异值的对角矩阵,并且V是特征向量的正交矩阵A' * A.
问题是:MATLAB函数eig有时会返回错误的特征向量.
这是我的代码:
function [U,S,V]=badsvd(A)
W=A*A';
[U,S]=eig(W);
max=0;
for i=1:size(W,1) %%sort
for j=i:size(W,1)
if(S(j,j)>max)
max=S(j,j);
temp_index=j;
end
end
max=0;
temp=S(temp_index,temp_index);
S(temp_index,temp_index)=S(i,i);
S(i,i)=temp;
temp=U(:,temp_index);
U(:,temp_index)=U(:,i);
U(:,i)=temp;
end
W=A'*A;
[V,s]=eig(W);
max=0;
for i=1:size(W,1) %%sort
for j=i:size(W,1)
if(s(j,j)>max)
max=s(j,j);
temp_index=j;
end
end
max=0;
temp=s(temp_index,temp_index);
s(temp_index,temp_index)=s(i,i);
s(i,i)=temp;
temp=V(:,temp_index);
V(:,temp_index)=V(:,i);
V(:,i)=temp;
end
s=sqrt(s);
end
Run Code Online (Sandbox Code Playgroud)
我的代码返回正确的s矩阵,也"几乎"正确U …
我正在尝试使用Scipy/Numpy在Python中实现时间序列的"相位加扰".简而言之,我想:
我有一个表面上似乎有用的脚本(见图),但我怀疑我错过了一些重要的东西.特别是,我返回的阶段扰码时间序列具有复值条目而不是实值条目,我不知道该怎么做.如果任何信号处理人员可以权衡并教育我,我会非常感激.
这是适用于Jupyter Notebook的示例脚本:
%matplotlib inline
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft, ifft
def phaseScrambleTS(ts):
"""Returns a TS: original TS power is preserved; TS phase is shuffled."""
fs = fft(ts)
pow_fs = np.abs(fs) ** 2.
phase_fs = np.angle(fs)
phase_fsr = phase_fs.copy()
np.random.shuffle(phase_fsr)
fsrp = np.sqrt(pow_fs) * (np.cos(phase_fsr) + 1j * np.sin(phase_fsr))
tsr = ifft(fsrp)
return tsr
ts = np.array([0.02, -1.04, 2.50, 2.21, 1.37, -0.05, 0.06, -0.22, -0.48, -0.31, …Run Code Online (Sandbox Code Playgroud) 我想知道在尝试使用MATLAB的写时复制(懒惰复制)机制来链接来自单元阵列中多个单元的相同大矩阵时,是否有办法确定我是否做得对.
例如:
img = randn(500);
[dx,dy] = gradient(img);
S = cell(2,2);
S{1,1} = dx.^2;
S{2,2} = dy.^2;
S{1,2} = dx.*dy;
S{2,1} = S{1,2}; % should be a reference, as long as not modified
Run Code Online (Sandbox Code Playgroud)
但看看输出whos:
>> whos
Name Size Bytes Class Attributes
S 2x2 8000448 cell
dx 500x500 2000000 double
dy 500x500 2000000 double
img 500x500 2000000 double
Run Code Online (Sandbox Code Playgroud)
我本来希望看到S占用6 MB,而不是8 MB.
有没有办法验证程序中没有错误,那两个单元格仍然在最后引用相同的数组?
我知道这个功能memory,但遗憾的是它只适用于Windows平台(我在MacOS上).
我在 MATLAB 中有一个元胞数组,例如A{1}, A{2}, A{3},...., A{561}。我想将它传递给函数参数,例如:
horzcat(A{1}, A{2}, ..., A{561})
Run Code Online (Sandbox Code Playgroud)
显然,这是一种昏昏欲睡的方式来写入所有单元格。做到这一点的捷径是什么?
我已经尝试过了,horzcat(A{1}:A{561})但它不起作用。
我的数据上有重复的条纹图案,我试图通过傅立叶变换它并删除图案来将其取出。但是我似乎无法找到返回图像空间的正确方法。
red_cube_array = (cube_array - np.median(cube_array)) * taper
im_fft = (fftpack.fft2(red_cube_array))
im_po = fftpack.fftshift((np.conjugate(im_fft) * im_fft).real)
mask = np.empty_like(im_po[0])*0 + 1
mask[417:430, 410:421] = 0
mask[430:443, 438:450] = 0
im_po_mask = im_po * mask
im_ifft = fftpack.ifft2(fftpack.ifftshift(im_po_mask))
Run Code Online (Sandbox Code Playgroud)
taper只是一个在执行 FFT 时平滑边缘以消除边缘效应的数组。然后我对数组进行 FFT 并非常粗略地过滤掉垃圾。然而,回去似乎不起作用。我是不是在某个地方绊倒了?
我想知道如何使用 OpenCV 在 Python 3 中编写一个函数,它接收图像和阈值,并在严重模糊并降低质量(越快越好)后返回“暗”或“亮”。这听起来可能含糊不清,但任何有效的方法都行。