如何使用python中的列表元素制作矩阵

时间:2017-05-17 07:43:29

标签: python list matrix

如何制作由列表元素组成的矩阵?例如

t = np.zeros(((N+1),(N+1)))
for row in range (N+1):
    for column in range (N+1):
        position = [row,column]
        t[row,column] = position

但这会产生一个错误,说明"设置一个带序列的数组元素。"

我希望代码能够创建像

这样的东西
[[[0,0],[0,1],[0,2]],
 [[1,0],[1,1],[1,2]],
 [[2,0],[2,1],[2,2]]]

2 个答案:

答案 0 :(得分:1)

您的数据是三维的,因此您的数组缺少其最后一个维度:

t = np.zeros(((N+1),(N+1),2))
# for loops...

为什么不使用numpy.indices()?这项任务就是它的目的:

t = numpy.indices((N+1, N+1))[::-1, :].T
# array([[[0, 0],
#         [0, 1],
#         [0, 2]],
# 
#        [[1, 0],
#         [1, 1],
#         [1, 2]],
# 
#        [[2, 0],
#         [2, 1],
#         [2, 2]]])

使用3D数据的优势应该立即明确,因为您也可以轻松索引list维度。例如。仅打印所有列表的第二个值

t[..., 0]
# array([[0, 0, 0],
#        [1, 1, 1],
#        [2, 2, 2]])

或绘制数据:

plt.figure()
plt.imshow(t[..., 0])  # plot first value of lists
plt.figure()
plt.imshow(t[..., 1])  # plot second value of lists
plt.show()

或处理数据的任何其他方法:

numpy.sum(t, axis=1)
# array([[0, 3],
#        [3, 3],
#        [6, 3]])

t / numpy.max(t)
# array([[[ 0. ,  0. ],
#         [ 0. ,  0.5],
#         [ 0. ,  1. ]],
# 
#        [[ 0.5,  0. ],
#         [ 0.5,  0.5],
#         [ 0.5,  1. ]],
# 
#        [[ 1. ,  0. ],
#         [ 1. ,  0.5],
#         [ 1. ,  1. ]]])

如果您的数组是list的二维数组,那么这些是您显然无法做到的事情。

答案 1 :(得分:0)

您需要将ndarray中元素的dtype作为对象:

a = np.zeros([N+1, N+1], dtype=object)
a[0][0] = [1, 2, 3]