【问题标题】:Python: Populate lower triangle matrix from a listPython:从列表中填充下三角矩阵
【发布时间】:2013-07-08 00:40:12
【问题描述】:

我有csv 格式的机票可用性离散时间数据。这用于表示出发和到达时间窗口组合的机票可用性。假设我的一天分为 4 个时间段 -

12:01 AM to 6:00 AM, 
6:01 AM to 12:00 PM, 
12:01 PM to 6:00 PM,
6:01 PM to 12:00 AM

1 表示有可用于该出发和到达组合的车票,否则为 0。对于此示例,假设机票适用于所有出发-到达组合,csv 文件将包含以下数据:

1,1,1,1,1,1,1,1,1,1

此数据用于表示此矩阵(请注意,某些组合在此处变为零,因为它们是 24 小时期间的不合逻辑时间组合):

                    Departure time period           
                    12:01 AM to 6:00 AM | 6:01 AM to 12:00 PM  | 12:01 PM to 6:00 PM |  6:01 PM to 12:00 AM|
Arrival time period ------------------- | ---------------------|---------------------|---------------------|
12:01 AM to 6:00 AM                   1 |                     0|                    0|                    0|
6:01 AM to 12:00 PM                   1 |                     1|                    0|                    0|
12:01 PM to 6:00 PM                   1 |                     1|                    1|                    0|
6:01 PM to 12:00 AM                   1 |                     1|                    1|                    1|

csv 文件包含此数据多天。我已将此数据作为字典读取,其中日期为键,可用性组合为列表。数据处理正在Python 2.7 中完成。对于特定的一天,我现在可以使用日期键检索可用性列表。

现在,我有两个问题:

  • 如何将数据转换为矩阵 类型数据结构。本质上,这涉及将列表转换为较低的 三角矩阵加上对角线元素。我试过使用 numpy 中的 reshape 函数,但这并没有达到这个结果。

  • 转换矩阵后 - 我想以图形方式将可用性表示为主题网格 - 所有 1 为绿色方块,0 为 作为红色方块。这在 Python 中可以实现吗?怎么样?

我认为将csv 作为字典读取,然后将可用性元素存储在列表中是可行的方法,因为它看起来相当简单。如果您觉得有更聪明的方法可以做到这一点,请修改方法。

大家有什么想法吗?!?

【问题讨论】:

    标签: data-structures python-2.7 numpy duration


    【解决方案1】:
    import numpy as np
    import matplotlib.pyplot as plt
    
    data = [1,1,1,1,1,1,1,1,1,1]
    arr = np.zeros((4,4))
    indices = np.tril_indices(4)
    arr[indices] = data
    print(arr)
    
    # array([[ 1.,  0.,  0.,  0.],
    #        [ 1.,  1.,  0.,  0.],
    #        [ 1.,  1.,  1.,  0.],
    #        [ 1.,  1.,  1.,  1.]])
    
    
    plt.imshow(arr, interpolation='nearest', cmap=plt.get_cmap('RdYlGn'))
    plt.show()
    

    地块

    【讨论】:

    • @sriram,如果你不介意我问,除了你提到的原因,你这样做也是为了节省内存吗?我问是因为我希望使用三角矩阵来存储数据。
    • @spacedustpi:您可能希望使用scipy.sparse matrix 进行高效存储。
    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2016-02-15
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多