对于我的应用程序(Euler Math Toolbox),我从 Visual C++ 2010 Express 切换到 Visual C++ 2012 Professional。为了与 XP 兼容,我使用 Visual C++ 2012 更新 1 中的 110-XP 平台工具集。
在早期版本中,我在程序目录中添加了三个 DLL 文件 MSV90*.dll 以及它们的清单。我可以为 Visual C++ 110 做同样的事情吗?我需要包含哪些文件?我需要清单吗?如果是这样,我在哪里可以找到一个?
我正在尝试编写一个获取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 …
我需要使用半径为 17 或更大的 3D 结构元素来计算 3D 形状数组 (400,401,401)、大小为 64320400 字节的形态学开度。结构元素 ndarray 的大小为 42875 字节。使用scipy.ndimage.morphology.binary_opening,整个过程消耗 8GB RAM。
I have read scipy/ndimage/morphology.py on GitHub, and as far as I can tell, the morphology erosion operator is implemented in pure C. It is to difficult for me to understand the ni_morphology.c source, so I haven't found any part of this code which leads to such enormous memory utilization. Adding more RAM is not a workable solution, since memory usage may increase …
我正在使用 Octave 编写一个脚本来绘制不同时间段的函数。我希望制作一个情节动画,以便看到随时间的变化。
有没有办法保存每个时间点的每个图,以便可以组合所有图来创建此动画?
我试图解决以下任务:我给了一个n元素的数组.众所周知,并非所有数组的键都是不同的,但我们有k个不同的元素(当然k <= n).赋值是在O(n log(log n))最坏情况下对数组进行稳定排序,而k = O(log n).我被允许使用O(n)额外的内存.
我目前的解决方案如下所述:
使用大小为k的链接创建一个哈希表,该哈希表执行以下操作:如果哈希函数尝试将元素插入到已经有值的位置 - 它会检查它们是否相等 - 如果它们是,则将其添加到列表中,如果没有,它会开始在数组中移动,直到它找到一个具有相同值或空位(首先出现)的地方.
这样,每个地方的列表只包含具有相同键的元素.哈希表的插入是从原始数组的开始到结束,因此每个列表都是稳定排序的.然后使用mergeSort对哈希表中的数组进行排序(对于列表,我们将第一个元素视为一个并移动它).
完成合并排序后,我们按顺序将元素复制回原始数组,每当我们遇到一个列表时,我们按顺序复制每个元素.
这是我不确定的:
是否可以这么说,因为哈希表的大小为k,而且我们只有k个不同的元素,统一哈希承诺哈希函数尝试给出不同值的时间在数组中相同的位置可以忽略不计,因此它是构建的时间复杂度是O(n)?
因为如果是这样,算法的运行时似乎是O(n + k log k)= O(n + log n*log(log n)).这肯定比O(n log k)更好,这是所需要的.
我在 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 中编写一个函数,它接收图像和阈值,并在严重模糊并降低质量(越快越好)后返回“暗”或“亮”。这听起来可能含糊不清,但任何有效的方法都行。
代码
figure
scatter([1,2,3],[1,2,3]);
ax = gca;
ax.YDir = 'reverse'
ah = annotation('arrow','position',[ 2.5 2.5 -1 -1]);
set(ah,'parent',ax);
Run Code Online (Sandbox Code Playgroud)
给出错误的矢量头对齐:
有什么想法如何解决这个问题吗?
我有一个8x8的矩阵,例如A=rand(8,8)。我需要做的是沿对角线对所有2x2矩阵进行子集化。这意味着,我需要保存矩阵A(1:2,1:2),A(3:4,3:4),A(5:6,5:6),A(7:8,7:8)。为了更好地说明自己,我使用的当前版本如下:
AA = rand(8,8);
BB = zeros(8,2);
for i = 1:4
BB(2*i-1:2*i,:) = AA(2*i-1:2*i,2*i-1:2*i);
end
Run Code Online (Sandbox Code Playgroud)
这适用于小型AA矩阵和小型AA子矩阵,但是随着大小的显着增长(甚至可能达到50,000x50,000),使用上述for循环无法实现。有没有办法实现上述目的而没有循环?我考虑过其他可能利用上下三角形矩阵的方法,但是即使在某些时候,这些方法似乎也需要循环。任何帮助表示赞赏!