如果我有这个向量:
x = [1 1 1 1 1 2 2 2 3 4 4 6 6 6 6]
Run Code Online (Sandbox Code Playgroud)
我想根据自己得到每个唯一号码的位置.
y = [1 2 3 4 5 1 2 3 1 1 2 1 2 3 4]
Run Code Online (Sandbox Code Playgroud)
目前我正在使用:
y = sum(triu(x==x.')) % MATLAB 2016b and above
Run Code Online (Sandbox Code Playgroud)
它很紧凑,但显然没有内存效率.
对于MATLAB编程的纯粹美,我会避免使用循环.你有更好的简单实现吗?
语境:
我的最终目标是对矢量进行排序,x但约束条件是出现N次数的数字优先于另一个出现N次数的数字:
[~,ind] = sort(y);
x_relative_sort = x(ind);
% x_relative_sort = 1 2 3 4 6 1 2 4 6 1 2 6 1 6 1
Run Code Online (Sandbox Code Playgroud) 我正在尝试为以下方程式t_t <=(xi_i-xi_j)绘制3D表面图。sqrt(rho)。我已经包含了我的代码。但我想在此表面曲线图的下方标记或阴影区域。我该如何解决?
[X,Y] = meshgrid(1:0.5:10,1:20);
Z = X.* sqrt(Y);
figure;
colormap(jet)
surf(X,Y,Z)
colorbar
xlabel('Distance between two spatial points \xi_i & \xi_j (\xi_i - \xi_j)');
ylabel('Density(\rho)');
zlabel('Transmission Delay (t_t)');
Run Code Online (Sandbox Code Playgroud)
我注意到datenumMATLAB R2017a及更高版本中的函数有奇怪的行为:
如果您尝试运行:
date = datenum([""],'yyyymmdd');
Run Code Online (Sandbox Code Playgroud)
我们收到警告:
警告:不支持将DATENUM与空白的日期字符向量或空白的字符串一起使用。结果可能会在将来的版本中更改。
date =
0x1 empty double column vector
Run Code Online (Sandbox Code Playgroud)
但是现在,如果我们运行:
date = datenum(["","20181012"],'yyyymmdd')
Run Code Online (Sandbox Code Playgroud)
我们获得:
date = 2x1:
737426 % which corresponds to 20190101
737345
Run Code Online (Sandbox Code Playgroud)
因此,两次我们都给空字符串datenum,但是如果数组包含多个字符串,结果将不同。为什么在存在其他字符串(甚至是另一个空字符串)时却不能解析空字符串,而仅在单独出现时不能解析?
我正在寻找一种优雅的方法来计算离散卷积的"乘积",而不是总和.
这是离散卷积的公式:
在这种情况下,我们可以使用: conv(x,y)
现在我想实现这些操作
当然我可以使用一个循环,但我正在寻找一个技巧来线性化这个操作.
例:
f = [2 4 3 9 7 1]
g = [3 2 1]
dist = length(g)-1;
for ii = 1:length(f)-dist
x(ii) = prod(f(ii:ii+dist).*g)
end
Run Code Online (Sandbox Code Playgroud)
x =
Run Code Online (Sandbox Code Playgroud)144 648 1134 378
我有一个像A这样的矩阵,我想计算这个矩阵的每个对角线的总和,并在像Y这样的向量中显示它.
A=[1 2 3; 4 5 6; 7 8 9]
Y=[3 8 15 12 7]
Run Code Online (Sandbox Code Playgroud)
我知道代码
[sum(diag(y,2)),sum(diag(y,1)),sum(diag(y,0)),sum(diag (y,-1)),sum(diag (y,-2))]
Run Code Online (Sandbox Code Playgroud)
但我想把它写成一个函数.
y 是包含数字 1 到 10 的 5000 x 1 向量。我可以将 y 转换为 Y(5000 x 10 矩阵),使得
Y = zeros(5000,10);
for i = 1:5000
Y(i,y(i))=1;
end
Run Code Online (Sandbox Code Playgroud)
我可以在不使用 for 循环的情况下获得相同的结果吗?
是否可以同时删除矩阵的行和列?
例:
M = magic(3)
M =
8 1 6
3 5 7
4 9 2
Run Code Online (Sandbox Code Playgroud)
并使用单线移除第2列和第2行以获得:
M =
8 6
4 2
Run Code Online (Sandbox Code Playgroud) 给定X长度向量,和L之间有什么区别?fft(X)fft(X,L)
这是否意味着我们在使用时取了ffton L点,fft(X)而在进行fft向量取L时fft(X,L)呢?
我试图确定某些多边形是否相互重叠。所有多边形都在同一层中。
PostGis函数ST_OVERLAPS可以确定两个几何元素是否重叠。但我找不到一种方法来应用此函数来检查一个或多个多边形是否彼此重叠。
我想要这样的东西:
SELECT *
FROM MyGeometricTable g
WHERE ST_OVERLAPS(g.geom,g.geom) = 1
AND g.id <> g.id --The polygon that overlap another polygon is not the same.
Run Code Online (Sandbox Code Playgroud)
MyGeomtricTable 包含例如 100 个多边形。
谢谢
我有这个矩阵A,
A= [10 -12 4 8;
1 3 11 -2;
1 -9 8 0;
1 1 9 3].
Run Code Online (Sandbox Code Playgroud)
如果我在 Matlab 中使用 sortrows 函数B = sortrows(A)。我会得到这个。
B = [1 -9 8 0;
1 1 9 3;
1 3 11 -2;
10 -12 4 8].
Run Code Online (Sandbox Code Playgroud)
我想要的答案是这样的。
B = [1 3 11 -2;
1 -9 8 0;
1 1 9 3;
10 -12 4 8]
Run Code Online (Sandbox Code Playgroud)
问题是,我想在这里对我的行进行排序,但仅基于第 1 列。如果第 1 列中的值相同,则不要根据第 2 列对它们进行排序(在流派中此函数执行该列)。
如果有人能帮助我,我真的很感激。
谢谢。
我有一个复杂的MxN矩阵A,A显然有一些属性,呈现对角矩阵A'*A.A也是非常大(256x16384)所以我想不出一种方法来上传它在这里再现.
在MATLAB代码中,我有:
imshow(abs(A'*A),[]);
Run Code Online (Sandbox Code Playgroud)
python中转换的代码:
tmp=np.dot(A.T,A)
plt.imshow(np.absolute(tmp))
plt.show()
Run Code Online (Sandbox Code Playgroud)
生产:
对角似乎在旋转.这种轮换有什么理由吗?我正确地进行了转换吗?