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()