Python 如何使用条件在二维矩阵上循环
我是python新手,正在尝试弄清楚如何在2x2矩阵上循环 我的起点是一个*.csv文件,其中包含大量数据(10列173828行)。因为我只需要第一列(sigma_0值)和第六列(日期),所以我制作了一个名为sigma_JD的矩阵,它只包含这两列:Python 如何使用条件在二维矩阵上循环,python,loops,matrix,Python,Loops,Matrix,我是python新手,正在尝试弄清楚如何在2x2矩阵上循环 我的起点是一个*.csv文件,其中包含大量数据(10列173828行)。因为我只需要第一列(sigma_0值)和第六列(日期),所以我制作了一个名为sigma_JD的矩阵,它只包含这两列: import csv import numpy as np with open("C:/Users/.../03971822.csv") as input_file: reader = csv.reader(in
import csv
import numpy as np
with open("C:/Users/.../03971822.csv") as input_file:
reader = csv.reader(input_file)
array = []
for row in reader:
array.append(row)
matrix = np.asmatrix(array)
idx_IN_columns = [0, 5]
sigma_JD = matrix[:, idx_IN_columns]
print(sigma_JD)
print("size sigma_JD: ", np.shape(sigma_JD))
>>> print(sigma_JD)
[['-12.42' '2451544.576']
['-12.92' '2451544.576']
['-12.45' '2451544.576']
...,
['-11.66' '2454688.389']
['-12.61' '2454688.389']
['-11.72' '2454688.389']]
>>> print("size sigma_JD: ", np.shape(sigma_JD))
size sigma_JD: (173828, 2)
现在我想循环第二列——日期;它以一种特定的方式显示,称为“朱利安日”,例如JD值为
2451544表示日/月/年,小数位表示时间
我想写一个代码,其中考虑了一天内的所有sigma_0值。因此,循环应该使用特定的值,而不是通过索引
它应该从2451544,5开始,然后考虑这一天内的所有sigma_0值(并将其相加),然后转到第二天2451544,5,并执行相同的操作
我试过s.th。像这样,但不起作用
x = 2451544.5
y = x + 1
for i in sigma_JD[:, 1]:
while x < y:
print(sigma_JD[i, 1])
break
x=2451544.5
y=x+1
对于sigma_JD[:,1]:
当x
然后,我考虑创建自己的函数,但没有走那么远:
def select(x):
count = 2451544.5
select = []
for i in range(0, len(x[:, 1])): # loop over Julian Day
if count < count + 1:
row = []
for j in range(0, len(x[:, 0])): # loop over sigma_0 values
# take all sigma_0 values and sum it up
count += 1
return select
def选择(x):
计数=2451544.5
选择=[]
对于范围内的i(0,len(x[:,1]):#在朱利安日上循环
如果计数<计数+1:
行=[]
对于范围(0,len(x[:,0])):#在西格玛_0值上循环
#取所有sigma_0值并求和
计数+=1
返回选择
如果有人能帮助我,那将是非常非常好的。我已经为此工作了好几天了,我不知道如何才能完成这件事,这让我非常恼火
非常感谢。试一试(您可能需要下载)
用于测试的文件(test.csv
):
输出:
#For ordered (by date) output
ordered_dict = collections.OrderedDict(sorted(jd_sigma_map.items()))
for k, v in ordered_dict.items():
average = float(v/jd_sigma_count[k])
print("Sigma value for day %s = %0.3f \t(over %d days)\tAverage = %0.3f"
% (k, v, jd_sigma_count[k], average))
# Sigma value for day 2000-1-1 = -25.340 (over 2 days) Average = -12.670
# Sigma value for day 2000-1-2 = -8.840 (over 2 days) Average = -4.420
# Sigma value for day 2008-8-9 = -40.880 (over 3 days) Average = -13.627
注:
- 使用字典可以让我们每天“保持”一个西格玛值。使其比摆弄2x2阵列更容易
- 输出,
是一个字典,其键为格式为jd_sigma_map
的日期,值为当天的总sigma值。我们不关心格式,我们只希望一天中的每个键都是独一无二的YYYY-MM-DD
- 正如您所知,我在读取CSV的过程中“即时”完成了所有分析,您也可以将其存储在列表中,然后关闭分析post文件
- Python3解决方案(对于Python2.x,将
更改为print()
并将print…
更改为items()
)iterms()
- 请参阅对输出字典进行排序(在代码中添加)
test.csv
):
输出:
#For ordered (by date) output
ordered_dict = collections.OrderedDict(sorted(jd_sigma_map.items()))
for k, v in ordered_dict.items():
average = float(v/jd_sigma_count[k])
print("Sigma value for day %s = %0.3f \t(over %d days)\tAverage = %0.3f"
% (k, v, jd_sigma_count[k], average))
# Sigma value for day 2000-1-1 = -25.340 (over 2 days) Average = -12.670
# Sigma value for day 2000-1-2 = -8.840 (over 2 days) Average = -4.420
# Sigma value for day 2008-8-9 = -40.880 (over 3 days) Average = -13.627
注:
- 使用字典可以让我们每天“保持”一个西格玛值。使其比摆弄2x2阵列更容易
- 输出,
是一个字典,其键为格式为jd_sigma_map
的日期,值为当天的总sigma值。我们不关心格式,我们只希望一天中的每个键都是独一无二的YYYY-MM-DD
- 正如您所知,我在读取CSV的过程中“即时”完成了所有分析,您也可以将其存储在列表中,然后关闭分析post文件
- Python3解决方案(对于Python2.x,将
更改为print()
并将print…
更改为items()
)iterms()
- 请参阅对输出字典进行排序(在代码中添加)
\u map
字典更改为具有元组值(值,计数)
),再次感谢您的帮助。我在胡思乱想,想在整本字典的事情开始之前提出一个问题。例如,我有一个带有距离值(从0到20000)的第七列,我首先让用户回答问题[“距离=输入”(“请键入距离/半径:”),相应地,sigma_0值将被累加和平均。这是否可能?是否可行,制作一个带有日期和距离的键?如[dist_key='%f','%s-%s-%s%](第[6]行,年,月,日)]?到目前为止,代码运行良好。我还将输出保存到一个新文件中。是否有一种方法可以查看一天内考虑了多少sigma_0值?因为,实际上我需要每天sigma_0值的平均值(而不仅仅是总和)。不用担心,很高兴我能帮上忙!我已按要求更新了答案-这是解决问题的简单方法。不幸的是,我无法想出一个利用现有数据结构的“更简洁”的解决方案(例如,将\u map
字典更改为具有元组值(值,计数)
)再次感谢您的帮助。我正在考虑在整个字典工作开始之前进行查询。例如,我有一个距离值(从0到20000)的第七列,我首先让用户回答问题[“距离=输入”(“请输入距离”)/
-12.42, 0, 0, 0, 0, 2451544.576
-12.92, 0, 0, 0, 0, 2451544.576
-5.92, 0, 0, 0, 0, 2451545.677
-2.92, 0, 0, 0, 0, 2451545.699
-16.61, 0, 0, 0, 0, 2454688.310
-11.66, 0, 0, 0, 0, 2454688.389
-12.61, 0, 0, 0, 0, 2454688.400
#For ordered (by date) output
ordered_dict = collections.OrderedDict(sorted(jd_sigma_map.items()))
for k, v in ordered_dict.items():
average = float(v/jd_sigma_count[k])
print("Sigma value for day %s = %0.3f \t(over %d days)\tAverage = %0.3f"
% (k, v, jd_sigma_count[k], average))
# Sigma value for day 2000-1-1 = -25.340 (over 2 days) Average = -12.670
# Sigma value for day 2000-1-2 = -8.840 (over 2 days) Average = -4.420
# Sigma value for day 2008-8-9 = -40.880 (over 3 days) Average = -13.627
import numpy as np
array = [['-12.42', '2451544.576'],
['-12.92', '2451544.576'],
['-12.45', '2451544.576'],
['-11.66', '2454688.389'],
['-12.61', '2454688.389'],
['-11.72', '2454688.389']]
matrix = np.asmatrix(array)
print matrix
for (i, j), ele in np.ndenumerate(matrix):
if j == 1: #SECOND COL
print i, j, ele