随机数生成的python代码

现在需要用python 生成5组随机数向量,每组都是400行乘以1列(其实就是一个400X5)的矩阵。每一列都保证服从正态分布,范围在(0,5] 之间,左开右闭。生成完毕以后,给这个矩阵前面额外加一列,以20行一组进行标记从1开始标记,总共标记数1-20.请给出python代码。

import numpy as np

# 生成5组随机数向量
vecs = np.random.normal(2.5, 1.5, size=(400, 5))
vecs[vecs <= 0] = 0.01
vecs[vecs > 5] = 5

# 构造标记列
markers = np.repeat(np.arange(1, 21), 20).reshape(-1, 1)

# 在矩阵前面额外加一列
matrix = np.hstack((markers, vecs))

print(matrix)

chatgpt:


import numpy as np

# 生成5组随机数向量
rand_mat = np.random.normal(loc=2.5, scale=1.25, size=(400, 5))

# 对每组数据进行归一化处理
for i in range(5):
    rand_mat[:, i] = np.interp(rand_mat[:, i], (rand_mat[:, i].min(), rand_mat[:, i].max()), (0, 5))

# 生成标记列
marker = np.repeat(np.arange(1, 21), 20)

# 添加标记列
rand_mat = np.hstack((marker[:, np.newaxis], rand_mat))

# 打印结果
print(rand_mat)

首先,我们使用 numpy 库的 random.normal() 函数生成一个 400 行 5 列的矩阵,其中每个元素服从均值为 2.5、标准差为 1.25 的正态分布。

然后,对于每一列,我们使用 numpy 库的 interp() 函数对数据进行归一化处理,使其范围在(0,5] 之间。

接下来,我们生成一个长度为 400 的向量,其中前 20 个元素为 1,接下来 20 个元素为 2,以此类推,直到最后一个元素为 20。这个向量就是我们的标记列。

最后,我们使用 numpy 库的 hstack() 函数将标记列和随机数矩阵按列拼接在一起,形成一个 400 行 6 列的矩阵,其中第一列是标记列,后面 5 列是随机数向量

以下内容部分参考ChatGPT模型:


可以使用numpy库中的random模块来生成随机数,并使用numpy中的concatenate函数来加入额外的标记列。

具体代码如下:

import numpy as np

# 生成5组随机数矩阵
matrices = []
for i in range(5):
    matrix = np.random.normal(loc=2.5, scale=1.25, size=(400, 1)) # 均值为2.5,标准差为1.25
    matrix = np.clip(matrix, 0, 5) # 将范围限制在(0, 5]
    matrices.append(matrix)

# 加入标记列
marks = np.repeat(np.arange(1, 21), 20).reshape(-1, 1) # 生成20行一组的标记列
matrices = [np.concatenate([marks, matrix], axis=1) for matrix in matrices]

# 打印结果
for i, matrix in enumerate(matrices):
    print("Matrix", i+1, ":")
    print(matrix)

其中,np.random.normal函数用于生成服从正态分布的随机数,loc参数表示随机数的均值,scale参数表示随机数的标准差;np.clip函数用于将随机数范围限制在(0, 5]之间;np.repeat函数用于生成标记列,np.arange(1,21)表示生成1到20的数字数组,np.repeat将其重复20次得到长度为400的数组,reshape函数将其转换为400行1列的矩阵;np.concatenate函数用于将标记列和随机数矩阵按列合并。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快

我的代码是这样写的,运行结果如下:


import numpy as np

# 生成5组服从正态分布的随机数,范围在(0, 5]之间
data = np.random.normal(loc=2.5, scale=1.25, size=(400, 5))
data = np.maximum(0, np.minimum(5, data))

# 添加标记列
n_groups = 20
group_size = data.shape[0] // n_groups
labels = np.repeat(np.arange(1, n_groups+1), group_size)
data_with_labels = np.column_stack((labels, data))

print(data_with_labels)

结果:

img

以下是代码实现:

import numpy as np

生成5组随机数

matrix = np.random.normal(loc=2.5, scale=1.5, size=(400, 5))

将每一列的范围映射到(0, 5]

matrix = (matrix - matrix.min(axis=0)) / (matrix.max(axis=0) - matrix.min(axis=0)) * 5

生成标记列

label = np.repeat(np.arange(1, 21), 20).reshape(-1, 1)

将标记列和随机数矩阵合并

matrix = np.hstack((label, matrix))

print(matrix)

```

解释一下具体步骤:

  1. numpy 库中的 random.normal() 函数生成一个均值为 2.5,方差为 1.5 的正态分布,大小为 400 行乘以 5 列的矩阵。
  2. 为了保证所有的数符合给定范围 (0, 5],将矩阵中每一列的范围映射到 (0, 5] 上,得到新的矩阵。
  3. 生成一个大小为 20 行乘以 1 列的列向量,其中每一行都是从 1 到 20 的数字,然后用 numpy 库中的 repeat() 函数将这个列向量重复 20 次。
  4. numpy 库中的 hstack() 函数将标记列和随机数矩阵水平合并,得到一个大小为 400 行乘以 6 列的矩阵。

最终输出的矩阵就是题目要求的结果。


import numpy as np

# 生成随机数矩阵
matrix = np.random.normal(loc=2.5, scale=1.25, size=(400, 5))
matrix = np.clip(matrix, 0.0001, 5)

# 添加标记列
tag = np.repeat(np.arange(1, 21), 20).reshape(-1, 1)
matrix = np.hstack((tag, matrix))

print(matrix)

以下是生成5组随机数向量的Python代码示例,每组都是400行乘以1列的矩阵,每一列都服从正态分布,范围在(0,5]之间:

import numpy as np

# 生成5组随机数向量
num_vectors = 5
vector_len = 400
matrix = np.zeros((vector_len, num_vectors))
for i in range(num_vectors):
    matrix[:,i] = np.random.normal(loc=2.5, scale=1.25, size=vector_len)
    # 强制限制生成的随机数在(0, 5]之间
    matrix[:,i] = np.clip(matrix[:,i], 0.01, 5)

# 添加额外的一列进行标记
tag_num = 20
tag_len = int(vector_len / tag_num)
tags = np.repeat(np.arange(1, tag_num+1), tag_len)
tags = np.append(tags, np.repeat(tag_num, vector_len-len(tags)))
matrix = np.insert(matrix, 0, tags, axis=1)

print(matrix)

解释说明:

  1. 导入numpy库,用于生成随机数向量和处理数组。

  2. 定义变量num_vectors表示需要生成5组随机数向量,vector_len表示每组随机数向量的长度为400,可以根据需要进行修改。

  3. 创建一个新的空矩阵,大小为(vector_len, num_vectors),使用循环对每一列填充数据。使用NumPy的np.random.normal生成正态分布随机数,使用np.clip强制限制生成的随机数在(0, 5]之间,避免出现0和负数。

  4. 添加额外的一列进行标记,根据需要将矩阵切分成20组,每组包含20个标记,将标记重复添加并用np.append补全。将标记添加到矩阵的最前面,使用np.insert插入。

  5. 打印生成的矩阵。

注意:每次执行该代码都会生成不同的随机数向量,由于随机数的性质,每次生成的结果都不相同。如果需要生成固定的结果,可以先设置随机数种子。

参考网络

import numpy as np

# 生成5组随机数向量,每组都是400行乘以1列的矩阵
matrix_list = []
for _ in range(5):
    matrix = np.random.normal(loc=2.5, scale=1.5, size=(400, 1))
    matrix = np.clip(matrix, 0, 5)  # 范围限制在(05]之间
    matrix_list.append(matrix)

# 将5组矩阵拼接成一个大矩阵
result_matrix = np.concatenate(matrix_list, axis=1)

# 为大矩阵前面额外加一列,以20行一组进行标记,总共标记数1-20
num_groups = result_matrix.shape[0] // 20
labels = np.tile(np.arange(1, num_groups + 1), 20)
labels = np.expand_dims(labels, axis=1)
result_matrix = np.concatenate([labels, result_matrix], axis=1)

print(result_matrix)