Data structures Python:从列表中填充下三角矩阵

Data structures Python:从列表中填充下三角矩阵,data-structures,python-2.7,numpy,duration,Data Structures,Python 2.7,Numpy,Duration,我有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 该数据用于表示该矩阵(请注意,一些组合在此处变为零,因为

我有
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小时内是不合逻辑的时间组合):

csv
文件包含此数据达数天之久。我将此数据作为字典阅读,日期为关键,可用性组合为列表。数据处理是在Python 2.7中完成的。对于某一天,我现在可以使用日期键检索可用性列表

现在,我有两个问题:

  • 如何将数据转换为矩阵 类型数据结构。本质上,这涉及到将列表转换为较低的 三角形矩阵加上对角线元素。我试过使用 在
    numpy
    中重塑函数,但这并不能实现此结果

  • 一旦我转换了矩阵——我想以图形化的方式将可用性表示为一个主题网格——所有1都表示为绿色方块,0表示为0 就像红色的正方形。这在Python中是可以实现的吗?怎么做

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

有什么想法吗

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:你可能想用三角矩阵来高效存储数据。
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()