目录

1.在区间[a,b)随机生成n个整数。

2.在区间[a,b)随机生成n个数。

3.在区间[0,1)生成随机数

4.打乱顺序

5.从指定的列表中选择


NumPy(Numerical Python)是一个开源的科学计算库,专门用于高效处理多维数组(ndarray)和数值运算。它是 Python 生态中数据科学、机器学习、工程计算等领域的核心工具之一,提供了比原生 Python 列表更高效、更便捷的数组操作能力。

在 NumPy 中,numpy.random 是一个子模块,专门用于生成伪随机数(即基于算法生成的、看似随机但可复现的数值序列)。它提供了丰富的函数,可以生成不同分布的随机数(如均匀分布、正态分布、泊松分布等),并支持随机数组的生成、随机采样、打乱数据等操作。

1.在区间[a,b)随机生成n个整数。

np.random.randint

import numpy as np
x = np.random.randint(5, 10, 1)#在[5,10)中随机生成1个整数
y = np.random.randint(3, 15, 4)#在[3,15)中随机生成4个整数
print(x)
print(y)
print(type(x))
print(type(x))
z = np.random.randint(5, 10)#在[5,10)中随机生成1个整数
print(z)
print(type(z))

输出

[8]
[12  7 12  9]
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
6
<class 'int'>

可以看到随机数是numpy数组的格式<class 'numpy.ndarray'>

===========================补充==============================

opencv 读取的图片,本质上也是numpy 数组的形式。

对于一个彩色图像RGB来说,是一个三维的数组。

通过.flatten()可分离为3个一维的数组。

import numpy as np
import cv2#图片变数组
img = cv2.imread("MN.png")
print(type(img))
print(img.shape)
height, width = img.shape[:2]# 提取三个通道并展平为一维数组
lst1 = img[:, :, 0].flatten()  # Blue 通道
lst2 = img[:, :, 1].flatten()  # Green 通道
lst3 = img[:, :, 2].flatten()  # Red 通道print("Blue 通道 (lst1):", len(lst1))
print("Green 通道 (lst2):", len(lst2))
print("Red 通道 (lst3):", len(lst3))

输出:

<class 'numpy.ndarray'>
(387, 688, 3)
Blue 通道 (lst1): 266256
Green 通道 (lst2): 266256
Red 通道 (lst3): 266256

当然,数组也能反过来变成图片

通过np.random.randint随机生成3个数组,三合1,变成一张彩色图像。

import numpy as np
import cv2#图片变数组
img = cv2.imread("MN.png")
print(type(img))
print(img.shape)
height, width = img.shape[:2]# 提取三个通道并展平为一维数组
lst1 = img[:, :, 0].flatten()  # Blue 通道
lst2 = img[:, :, 1].flatten()  # Green 通道
lst3 = img[:, :, 2].flatten()  # Red 通道print("Blue 通道 (lst1):", len(lst1))
print("Green 通道 (lst2):", len(lst2))
print("Red 通道 (lst3):", len(lst3))#数组变图片
lst4 = np.random.randint(0,256,266256).astype(np.uint8)
lst5 = np.random.randint(0,256,266256).astype(np.uint8)
lst6 = np.random.randint(0,256,266256).astype(np.uint8)
print(lst4.dtype)
blue = lst4.reshape((height, width))
green = lst5.reshape((height, width))
red = lst6.reshape((height, width))
new_img = cv2.merge([blue, green, red])cv2.imshow("Modified Image", new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意:

lst4 = np.random.randint(0,256,266256).astype(np.uint8)

np.random.randint中的元素是int32格式,要改为opencv所用的np.uint8格式。

运行后,得到杂乱无章的雪花图。

=================补充的补充======================

当你有很多张yellow图,但无法通过审核来发送给你的好兄弟时。

是否可以通过这种方法(图像转数组,存入txt,发送。收到后在转图像),来实现呢?

代码中的MN.png(尺寸:(387, 688, 3)):

图片转数组并存入txt,代码如下:

import numpy as np
import cv2#图片变数组
img = cv2.imread("MN.png")
print(img.shape)
height, width = img.shape[:2]# 提取三个通道并展平为一维数组
lst1 = img[:, :, 0].flatten()  # Blue 通道
lst2 = img[:, :, 1].flatten()  # Green 通道
lst3 = img[:, :, 2].flatten()  # Red 通道# 保存到txt文件(每个通道占一行,空格分隔)
combined = np.array([lst1, lst2, lst3])
np.savetxt("img_data.txt", combined, fmt="%d")

txt中提取数组,并数组转图片,代码如下:

import numpy as np
import cv2
height= 387
width = 688# 读取文件内容
data = np.loadtxt("img_data.txt", dtype=int)
# 提取三个通道
blue = data[0].reshape(height, width).astype(np.uint8)
green = data[1].reshape(height, width).astype(np.uint8)
red = data[2].reshape(height, width).astype(np.uint8)
new_img = cv2.merge([blue, green, red])cv2.imshow("Modified Image", new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

img_data.txt:

(为什么图片转数组后,txt比图片大这么多。。。)

运行后:非常清晰

完整代码:

里面放了很多 比较得劲的 img_data.txt ,自己转了看把  =-=。

通过网盘分享的文件:test_np_cv


链接: https://pan.baidu.com/s/1y9YDJWw9xvG6AakM5X4GUA

提取码: ebtg

==============================================================

2.在区间[a,b)随机生成n个数。

np.random.uniform

import numpy as np
x = np.random.uniform(5, 10, 1)#在[5,10)中随机生成1个数
y = np.random.uniform(3, 15, 4)#在[3,15)中随机生成4个数
print(x)
print(y)
print(type(x))
print(type(x))
z = np.random.uniform(5, 10)#在[5,10)中随机生成1个数
print(z)
print(type(z))

3.在区间[0,1)生成随机数

rand 与 randn

import numpy as np# 平均数
def average(lst):sum_lst = 0for n in lst:sum_lst = sum_lst+nreturn sum_lst/len(lst)X = np.random.rand(100)#随机生成100个数
Y = np.random.randn(100)#随机生成100个数print(average(X))
print(average(Y))

运行多次后发现,

average(X) = 0.5

average(Y) = 0

rand是[0, 1) 均匀分布随机数

randn标准正态分布随机数,范围是 (-∞, +∞),但大部分值落在 [-3, +3] 之间。

rand 与 randn可用于模拟数据,例如:y = 3x + 4 ,x在[0,3)上的近似数据。

import numpy as np
import matplotlib.pyplot as plt
# 平均数
def average(lst):sum_lst = 0for n in lst:sum_lst = sum_lst+nreturn sum_lst/len(lst)# 生成特征数据 X:100个 [0,3) 区间的均匀分布随机数
x = 3 * np.random.rand(100)  # np.random.rand生成[0,1)均匀分布,乘以3扩展到[0,3)# 生成目标数据 y:线性关系 y = 4 + 3X + 高斯噪声
y = 4 + 3 * x + np.random.randn(100)  # np.random.randn生成标准正态分布噪声# 可视化原始数据
plt.plot(x, y, 'b.')  # 蓝色点图
plt.xlabel('x1')  # x轴标签
plt.ylabel('y')  # y轴标签
plt.axis([0, 3, 0, 20])  # 设置坐标范围:x[0,3], y[0,20]
plt.show()

运行后:

4.打乱顺序

shuffle

import numpy as np
lst = [ 1,2,3,4,5,6]
np.random.shuffle(lst)#打乱数组
print(lst)

输出[4, 2, 1, 5, 6, 3]

====================

在第一节的补充的补充中,数组转图片中

打乱一维的数组后,

产生了噪音:

代码:

import numpy as np
import cv2
height= 387
width = 688# 读取文件内容
data = np.loadtxt("img_data.txt", dtype=int)
# 提取三个通道
blue = data[0].reshape(height, width).astype(np.uint8)
green = data[1].reshape(height, width).astype(np.uint8)
red = data[2].reshape(height, width).astype(np.uint8)
np.random.shuffle(blue)
new_img = cv2.merge([blue, green, red])cv2.imshow("Modified Image", new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

5.从指定的列表中选择

np.random.choice

import numpy as nplst1 = [1,2,3,5,8,9,15,21]
print(np.random.choice(lst1))lst2 = ["一等奖","二等奖","三等奖","谢谢惠顾"]
print(np.random.choice(lst2))

修改各个选项的概率:

import numpy as np
lst2 = ["一等奖","二等奖","三等奖","谢谢惠顾"]
lst2_weight = [0.1, 0.2, 0.3,0.4]
result = np.random.choice(lst2, p=lst2_weight)
print(result)

概率为0.1,0.2,0.3,0.4

动态概率:模拟原神抽卡

lst = ['绿', '班尼特','芭芭拉','七七','刻晴','钟离']

lst_probabilities = [90 / 100, 4.5 / 100, 4.5 / 100, 0.3 / 100, 0.3 / 100, 0.4 / 100]

不断抽奖中,随着count的增加
count += 1

lst_probabilities跟着改变

lst_probabilities = [90 / 100-6*int(count2)/1000, 4.5 / 100, 4.5 / 100, 0.3 / 100+2*int(count2)/1000, 0.3 / 100+2*int(count2)/1000, 0.4 / 100+2*int(count2)/1000]

运行后:

完整代码
 

import sys
import numpy as np
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,QHBoxLayout, QLineEdit, QPushButton)
from PyQt5.QtCore import Qtclass GachaApp(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle('非酋or欧皇')self.setFixedSize(800, 400)self.count = 0self.count2 = 0self.lst = ['绿', '班尼特', '芭芭拉', '七七', '刻晴', '钟离']self.lst_probabilities = [90 / 100, 4.5 / 100, 4.5 / 100, 0.3 / 100, 0.3 / 100, 0.4 / 100]self.initUI()def initUI(self):central_widget = QWidget()self.setCentralWidget(central_widget)main_layout = QVBoxLayout()central_widget.setLayout(main_layout)# 输入框网格self.input_boxes = []grid_layout = QHBoxLayout()for i in range(10):input_box = QLineEdit()input_box.setAlignment(Qt.AlignCenter)input_box.setFixedSize(60, 60)input_box.setReadOnly(True)self.input_boxes.append(input_box)grid_layout.addWidget(input_box)main_layout.addLayout(grid_layout)# 抽卡按钮self.gacha_btn = QPushButton('抽卡')self.gacha_btn.setFixedSize(150, 50)self.gacha_btn.clicked.connect(self.gacha)# 计数器self.count_btn = QPushButton("0")self.count_btn.setFixedSize(80, 30)self.count_btn.setEnabled(False)# 重新开始按钮self.reset_btn = QPushButton('重新开始')self.reset_btn.setFixedSize(100, 30)self.reset_btn.clicked.connect(self.reset)# 按钮布局btn_layout = QHBoxLayout()btn_layout.addWidget(self.gacha_btn)btn_layout.addWidget(self.count_btn)btn_layout.addWidget(self.reset_btn)main_layout.addLayout(btn_layout)def gacha(self):self.count += 1self.count_btn.setText(f"{self.count}")# 更新概率(根据你的原始逻辑)self.lst_probabilities = [90 / 100 - 3 * self.count2 / 1000,4.5 / 100,4.5 / 100,0.3 / 100 + 1 * self.count2 / 1000,0.3 / 100 + 1 * self.count2 / 1000,0.4 / 100 + 1 * self.count2 / 1000]# 归一化处理(确保概率总和为1)prob_sum = sum(self.lst_probabilities)self.lst_probabilities = [p / prob_sum for p in self.lst_probabilities]# 抽卡并显示结果for i in range(10):result = np.random.choice(self.lst, p=self.lst_probabilities)self.input_boxes[i].setText(result)if result in ['七七', '钟离', '刻晴']:self.show_popup(f"恭喜你 抽到了 {result}")self.count2 = 0else:self.count2 += 1def reset(self):self.count = 0self.count2 = 0self.count_btn.setText(f"{self.count}")for box in self.input_boxes:box.clear()def show_popup(self, message):from PyQt5.QtWidgets import QMessageBoxmsg = QMessageBox()msg.setIcon(QMessageBox.Information)msg.setText(message)msg.setWindowTitle("恭喜")msg.setStandardButtons(QMessageBox.Ok)msg.exec_()if __name__ == '__main__':app = QApplication(sys.argv)ex = GachaApp()ex.show()sys.exit(app.exec_())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96278.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96278.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96278.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue2.x核心技术与实战(二)

目录 三、Vue2.x:生命周期+工程化开发(组件入门) 3.1 生命周期 3.1.1 生命周期 & 生命周期四个阶段 3.1.2 生命周期钩子 Vue生命周期钩子案例 - 新闻列表 & 输入框自动聚焦 3.2 综合案例:小黑记账清单 3.3 工程化开发入门 3.3.1 工程化开发 & 脚手架Vue …

【鸿蒙心迹】7×24小时极限求生:当Origin_null遇上鸿蒙,我如何用100杯咖啡换一条跨域活路?

文章概要 大家好&#xff0c;我是那个把黑眼圈熬成华为工牌挂绳的倒霉蛋。过去100个夜晚&#xff0c;我在HarmonyOS NEXT的ArkWeb里被Origin:null反复按在地上摩擦——小程序白屏、OPTIONS 400、官方文档沉默三连击。最终&#xff0c;我用C、libcurl、OpenSSL和一堆速溶咖啡&am…

【git】删除一条本地提交的历史commit

在工程中&#xff0c;如果想要删除一条本地提交的历史commit&#xff0c;可以通过droprebase -i HEAD^n的方式。1.情景提交了三条commit&#xff0c;想删掉第二条commit。git logcommit_id_*******1 commit_id_*******2 commit_id_*******32.解决git rebase -i HEAD~2输出&…

软件测试中,JMeter 的作用以及优缺点是什么?

回答重点JMeter 是一款开源的软件测试工具&#xff0c;主要用来对各种软件或服务进行性能测试和负载测试。它可以模拟大量用户同时对服务器、网络或其他资源发起请求&#xff0c;从而测试它们的响应时间、吞吐量等性能指标。优点&#xff1a;1&#xff09; 开源且免费 &#xf…

STM32存储结构

我们在使用Keil编译程序成功后会,有一行各部分占用内存的提示信息,如下Program Size:Code7492 RO-data556 Rw-data72 ZI-data11688,这是stm32代码编译后的提示我们分析一下这个编译输出&#xff1a;- Code: 7492字节 -> 代码部分&#xff08;存放在Flash&#xff09;- RO-da…

手机 浏览器调用摄像头扫描二维码Quagga

注&#xff1a;需用谷歌浏览器才能调用权限1. 引入依赖&#xff1a;npm install ericblade/quagga2<template><el-button color"#188ae2" click"handleScan" class"scan-btn" :disabled"isInitializing || isScanning">{{…

【Oracle篇】伪列之Version Query:全链路追踪行数据变更的所有记录(不仅仅是被修改的最后时间)(第二篇,总共六篇)

&#x1f4ab;《博主主页》&#xff1a;    &#x1f50e; CSDN主页__奈斯DB    &#x1f50e; IF Club社区主页__奈斯、 &#x1f525;《擅长领域》&#xff1a;擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对…

代理模式深度解析:从静态代理到 Spring AOP 实现

代理模式是软件开发中一种经典的设计模式&#xff0c;它通过引入 "代理对象" 间接访问目标对象&#xff0c;从而在不修改目标对象代码的前提下&#xff0c;实现功能增强&#xff08;如日志记录、事务管理&#xff09;、权限控制等横切需求。从简单的静态代理到灵活的…

算法 ----- 链式

目录 一 、链式 二 、题目 1、两两相加 &#xff08;1&#xff09;题目 (3) 代码书写 2、两两交换链表中的节点 &#xff08;1&#xff09;题目 &#xff08;2&#xff09; 解题思路 &#xff08;3&#xff09;代码书写 3、重排链表 &#xff08;1&#xff09;题目 …

运维监控prometheus+grafana

目录 一、环境 二、Node_exporter部署 三、Prometheus部署 四、Grafana部署 五、验证、使用 一、环境 系统使用CentOS7虚拟机。 监控三台服务器&#xff1a; 192.168.114.10 Node1 #部署Prometheus、node_exporter、Grafana 192.168.114.20 Node2 …

数字孪生 :提高制造生产力的智能方法

近年来&#xff0c;在先进数字技术深度整合的推动下&#xff0c;制造业经历了深刻变革。数字孪生技术作为其中最具前景的创新之一&#xff0c;正重塑工厂和生产流程的设计、监控和优化方式。该技术的核心在于为物理资产、系统或流程创建虚拟映射。这种虚拟映射实时同步现实世界…

【论文阅读】-《SIGN-OPT: A QUERY-EFFICIENT HARD-LABEL ADVERSARIAL ATTACK》

Sign-OPT: 一种查询高效的硬标签对抗攻击 原文链接&#xff1a;https://arxiv.org/pdf/1909.10773 摘要 我们研究在访问受限情况下评估机器学习系统对抗鲁棒性的最实用问题设置&#xff1a;用于生成对抗样本的硬标签黑盒攻击设置&#xff0c;其中允许有限的模型查询&#xff…

安卓11 12系统修改定制化_____如何去掉 搜狗输入法 首次运行时权限授权弹窗 其他应用可借鉴

有些内置应用或者第三方应用在首次使用时会跳出权限允许弹窗。虽然这个是系统为了用户安全设置的一道检测机制。但无形之中会影响到定制类用户的使用。那么能不能去除这个首次运行的权限弹窗呢。其实也有多方法可参阅解决。 通过博文了解💝💝💝 1💝💝💝-----首次…

双环模型:一个蕴含安全哲学的类设计解析

双环模型&#xff1a;一个蕴含安全哲学的类设计解析 在编程世界中&#xff0c;优秀的类设计不仅能实现功能需求&#xff0c;更能体现开发者对系统本质的理解。本文将深入剖析一个看似简单却蕴含深刻安全哲学的OP类&#xff0c;探讨其双环模型背后的设计思想与实践价值。 类结构…

牛津大学xDeepMind 自然语言处理(4)

牛津大学xDeepMind 自然语言处理 Natural Language Processing 语音识别 Speech Recognition语音识别概述 问题定义&#xff1a;自动语音识别&#xff08;ASR&#xff09;、文本到语音合成&#xff08;TTS&#xff09;等相关任务&#xff1a;说话人识别、语音增强、语音分离等语…

MyBatis处理SQL语句映射

基础MyBatis问题以去看MyBatis基础。 使用log4j设置日志在控制台打印SQL语句及其执行信息 也可以使用MyBatis基础中用的slf4j。 在pom.xml文件中引入log4j坐标依赖 <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><…

嵌入式硬件篇---麦克纳姆轮轨迹偏移

麦克纳姆轮的轨迹偏移是机械结构、驱动系统、控制逻辑及外部环境等多因素共同作用的结果&#xff0c;其核心是各轮子的驱动力 / 运动状态无法按理论模型实现协同&#xff0c;导致车体实际运动与期望轨迹产生偏差。以下是具体影响因素的详细分析&#xff1a;一、机械结构偏差&am…

C语言安全函数分享

在日常写程序中有一些功能函数是可以重复使用的&#xff0c;在c语言的标准库里面也有对应的功能函数&#xff0c;但是那些功能函数有会有小问题然后我就整理了一下对应功能的安全函数的使用。其中前四个函数可以编译成一个动态库&#xff0c;然后在项目工程中只需要包含对应的头…

汽车之家联合HarmonyOS SDK,深度构建鸿蒙生态体系

汽车之家作为一家领先的汽车互联网公司&#xff0c;致力于打造服务全球的汽车生态科技平台&#xff0c;覆盖"看选买用换"的一站式购车体验。2023年12月底&#xff0c;汽车之家正式启动鸿蒙开发&#xff0c;并于2024年年底成功构建了完整的鸿蒙生态体系&#xff0c;涵…

深度学习驱动的订单簿分析与交易策略优化

订单簿数据特征与预处理方法 高频金融数据中&#xff0c;订单簿&#xff08;Order Book&#xff09;承载着市场参与者的实时交易意图。不同于K线数据的聚合特性&#xff0c;订单簿数据具有独特的时空特征&#xff1a; 多维层级结构&#xff1a;包含不同价格档位的买卖盘深度信息…