python - 将嵌套 for 循环迭代的结果存储在单个变量中:具有多个不同长度的列的表
问题描述
我正在尝试为一年中的每个月生成 0 到 1 之间的随机数:例如,一月有 31 天,我想生成 31*24 的此类随机数并将它们存储在一个数组中。12 个月的每个月都一样。我希望它们都存储在同一个表或矩阵下,可以调用它们进行进一步的操作。在 MATLAB 中,这很容易通过将 for 循环结果存储在单元阵列中来实现。我想在 Python 中做同样的事情。如果我附加所有随机数,它们只会创建一个 loooooong 数组(1D),但我更喜欢每个月有 12 列 1 的数组,其中随机数垂直存储。由于每个月的天数不同,每个月列的长度也会不同。
# Find the no of hours in each month in a certain year
import calendar
k = 1
hrs = np.array([])
for k in range(12):
no_hrs = (calendar.monthrange(2020, k+1) [1])*24 # 2020 is a random year
hrs = np.append(hrs,no_hrs)
hrs = hrs.astype(int) # no of hrs for each month
# Now we generate the random numbers and store them in an 1D array
rndm = np.array([])
k = 1
for k in range(12):
for _ in range(hrs[(k)]):
value = random()
rndm = np.append(value,rndm)
rndm # this is the array containing 366*24 elements (for a year)
# But I would like the array to be splitted in months
该数组将包含 366*24 = 8784 个元素(一年)但我希望将数组拆分为几个月。(不等列大小)
解决方案
可以使用 np.arrays 列表来完成,我添加了每个数组长度的打印。
import calendar
import numpy as np
import random
k = 1
hrs = np.array([])
for k in range(12):
no_hrs = (calendar.monthrange(2020, k+1) [1])*24 # 2020 is a random year
hrs = np.append(hrs,no_hrs)
hrs = hrs.astype(int) # no of hrs for each month
rndm = []
k = 1
for k in range(12):
x = np.array([])
for _ in range(hrs[(k)]):
value = random.random()
x = np.append(value,x)
rndm.append(x)
print(len(rndm))
for k in range(12):
print(k, len(rndm[k]))
它打印
12
0 744
1 696
2 744
3 720
4 744
5 720
6 744
7 744
8 720
9 744
10 720
11 744
如果您想要月份名称而不是数字,您可以使用字典。
推荐阅读
- android - 如何在android中获取PNG格式的图像
- elasticsearch - 如何从 Logstash 的文档字段中提取服务名称
- c# - SharePoint 2013:为什么在创建 clientContext 时出现 500 错误?
- linux - iconv 命令不会将纯文本文件的编码更改为另一种编码
- python - 如何使用 python 抓取使用 base 64 图像编码并存储在数据库中
- typescript - typescript 类装饰器:typescript 编译器无法识别抽象方法
- python - 使用 ansible 和 python 在 Oracle 中更改参数
- python - python如何将动态创建类转储到文件
- reactjs - 将标准化数据存储到 Redux
- visual-studio - 根据文件夹或显示文件夹路径设置 Visual Studio 文档选项卡颜色