Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用条件在二维矩阵上循环_Python_Loops_Matrix - Fatal编程技术网

Python 如何使用条件在二维矩阵上循环

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

我是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(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
    是一个字典,其键为格式为
    YYYY-MM-DD
    的日期,值为当天的总sigma值。我们不关心格式,我们只希望一天中的每个键都是独一无二的
  • 正如您所知,我在读取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
    是一个字典,其键为格式为
    YYYY-MM-DD
    的日期,值为当天的总sigma值。我们不关心格式,我们只希望一天中的每个键都是独一无二的
  • 正如您所知,我在读取CSV的过程中“即时”完成了所有分析,您也可以将其存储在列表中,然后关闭分析post文件
  • Python3解决方案(对于Python2.x,将
    print()
    更改为
    print…
    并将
    items()
    更改为
    iterms()
  • 请参阅对输出字典进行排序(在代码中添加)

你可以考虑使用熊猫来完成这项任务。它在后台使用numpy,但它允许您读取csv,将datetime列转换为日期,并提供简单易用的groupby函数。你可以考虑使用熊猫来完成这项任务。它在后台使用numpy,但它允许您读取csv,将datetime列转换为日期,并提供简单易用的groupby函数。到目前为止,代码工作得很好。我还将输出保存到一个新文件中。有没有一种方法可以让我知道一天内考虑了多少sigma_0值?因为,实际上我需要每天的sigma_0值的平均值(而不仅仅是总和)。不用担心,很高兴我能帮上忙!我已经按照要求更新了答案-这是一个简单的问题解决方案。不幸的是,我想不出一个“更整洁”的解决方案来利用现有的数据结构(例如,将
\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