上述代码,30个数据为一组,但是组内的数据不能打乱,打乱的是所有组,
时间: 2024-03-09 22:51:01 浏览: 8
非常抱歉,我理解有误。如果要求每30行为一组,但是每组内部不能打乱,只能打乱所有组之间的顺序,可以使用类似于上面的方法,只是在第3步中使用randperm函数生成的是每组数据的随机排列,而不是整个矩阵的随机排列。具体步骤如下:
1. 使用reshape函数将矩阵每30行数据为一组分割,得到一个大小为(1348, 30*19)的矩阵。
2. 对于每一组数据,使用randperm函数生成一个1到30的随机排列。
3. 将步骤1中得到的矩阵按照步骤2中生成的随机排列重新排列每一组数据。
4. 使用randperm函数生成一个1到1348的随机排列。
5. 将步骤3中得到的按组打乱顺序的矩阵按照步骤4中生成的随机排列重新排列即可得到打乱后的矩阵。
下面是具体的代码实现:
```matlab
% 原始矩阵大小为40440*19
A = rand(40440, 19);
% 将每30行数据为一组分割,得到1348组数据
B = reshape(A, 30, [])';
% 对于每一组数据,生成1到30的随机排列
for i = 1:size(B, 1)
B(i, :) = B(i, randperm(size(B, 2)));
end
% 生成1到1348的随机排列
idx = randperm(size(B, 1));
% 按照随机排列重新排列所有组
C = B(idx, :);
% 将打乱后的矩阵重新合并成原始大小的矩阵
D = reshape(C', [], 19);
```
这样,变量D就是你所需的打乱后的矩阵,每组内部的数据顺序不变。
相关问题
矩阵大小为40440*19,matlab将变量每30行数据为一组分割,然后打乱矩阵
可以使用matlab中的reshape函数和randperm函数来实现你的需求。具体步骤如下:
1. 使用reshape函数将矩阵每30行数据为一组分割,得到一个大小为(1348, 30*19)的矩阵。
2. 使用randperm函数生成一个1到1348的随机排列。
3. 将步骤1中得到的矩阵按照步骤2中生成的随机排列重新排列即可得到打乱后的矩阵。
下面是具体的代码实现:
```matlab
% 原始矩阵大小为40440*19
A = rand(40440, 19);
% 将每30行数据为一组分割,得到1348组数据
B = reshape(A, 30, [])';
% 生成1到1348的随机排列
idx = randperm(size(B, 1));
% 按照随机排列重新排列矩阵
C = B(idx, :);
% 将打乱后的矩阵重新合并成原始大小的矩阵
D = reshape(C', [], 19);
```
这样,变量D就是你所需的打乱后的矩阵。
java将一组数据打乱,重新洗牌
可以利用Java中的Collections.shuffle()方法来打乱一组数据,实现重新洗牌的功能。具体实现代码如下:
```java
import java.util.ArrayList;
import java.util.Collections;
public class ShuffleExample {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
numbers.add(i);
}
System.out.println("Original List: " + numbers);
Collections.shuffle(numbers);
System.out.println("Shuffled List: " + numbers);
}
}
```
上述代码中,我们首先创建了一个包含1到10的整数的ArrayList,然后使用Collections.shuffle()方法将其打乱,最后输出打乱后的结果。