小编obc*_*don的帖子

计算数组中的重复整数

如果我有这个向量:

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)

sorting matlab vector counting sequence

8
推荐指数
2
解决办法
103
查看次数

如何在Matlab中绘制(或)遮盖Surface plot图表下方的区域?

我正在尝试为以下方程式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)

在此处输入图片说明

matlab

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

空字符串串联的Datenum行为

我注意到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,但是如果数组包含多个字符串,结果将不同。为什么在存在其他字符串(甚至是另一个空字符串)时却不能解析空字符串,而仅在单独出现时不能解析?

matlab date

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

计算离散卷积"乘积"的有效方法

我正在寻找一种优雅的方法来计算离散卷积的"乘积",而不是总和.

这是离散卷积的公式:

在此输入图像描述

在这种情况下,我们可以使用: 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 =

144    648   1134    378
Run Code Online (Sandbox Code Playgroud)

arrays matlab multiplication convolution sliding-window

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

计算矩阵的每个对角线的总和

我有一个像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)

但我想把它写成一个函数.

matlab sum matrix diagonal

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

如何在 Matlab 中矢量化以下代码?

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 循环的情况下获得相同的结果吗?

matlab for-loop vectorization

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

在矩阵中同时删除行和列

是否可以同时删除矩阵的行和列?

例:

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)

matlab matrix

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

fft点和向量中fft之间的差异

给定X长度向量,和L之间有什么区别?fft(X)fft(X,L)

这是否意味着我们在使用时取了ffton L点,fft(X)而在进行fft向量取Lfft(X,L)呢?

matlab fft vector

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

检查某些多边形是否相互重叠

我试图确定某些多边形是否相互重叠。所有多边形都在同一层中。

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 个多边形。

谢谢

sql postgresql postgis

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

仅根据一列对矩阵进行排序

我有这个矩阵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 列对它们进行排序(在流派中此函数执行该列)。

如果有人能帮助我,我真的很感激。

谢谢。

sorting matlab

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

从MATLAB转换为python时,矩阵乘法会产生不同的结果

我有一个复杂的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)

生产:

在此输入图像描述

对角似乎在旋转.这种轮换有什么理由吗?我正确地进行了转换吗?

python matlab code-conversion

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