此代码片段的目标是创建一个形状(10,10)的二维数组,其中
数组[0,0]=1;
数组[0,9]=100;和
数组[9,0]=50。
当这些元素之间的间隔必须如预期输出中所示的那样相等时,就会出现复杂情况。行必须以相等的间隔增加到100,列必须以相等的间隔增加到50。
我知道我的代码在“matrix_list”的列表理解中有一个逻辑错误,但我不确定是什么错误。
我写的代码:
`import numpy as np`
`matrix_list = np.zeros((10,10), dtype = int)`
`matrix_list =
[(np.arange(column, 101, (100-1)/9).astype(int)) for column in np.arange(1, 51, (50-1)/9).astype(int)]`
`print(np.array(matrix_list))`
预期输出:
[ 1, 12, 23, 34, 45, 56, 67, 78, 89, 100]
[ 6, 17, 28, 39, 50, 61, 72, 83, 94, 0]
[11, 22, 33, 44, 55, 66, 77, 88, 0, 0]
[17, 28, 39, 50, 61, 72, 83, 0, 0, 0]
[22, 33, 44, 55, 66, 77, 0, 0, 0, 0]
[28, 39, 50, 61, 72, 0, 0, 0, 0, 0]
[33, 44, 55, 66, 0, 0, 0, 0, 0, 0]
[39, 50, 61, 0, 0, 0, 0, 0, 0, 0]
[44, 55, 0, 0, 0, 0, 0, 0, 0, 0]
[50, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我得到的输出:
[array([ 1, 12, 23, 34, 45, 56, 67, 78, 89, 100])
array([ 6, 17, 28, 39, 50, 61, 72, 83, 94])
array([11, 22, 33, 44, 55, 66, 77, 88, 99])
array([17, 28, 39, 50, 61, 72, 83, 94])
array([22, 33, 44, 55, 66, 77, 88, 99])
array([28, 39, 50, 61, 72, 83, 94]) array([33, 44, 55, 66, 77, 88, 99])
array([39, 50, 61, 72, 83, 94]) array([44, 55, 66, 77, 88, 99])
array([50, 61, 72, 83, 94])]
"""
2条答案
按热度按时间0s0u357o1#
主要的问题是,你用列表解析的结果覆盖了预先分配的数组 matrix_list,而列表解析的结果只是一系列列表。这样,你就失去了开始定义的所有结构。(因为您也有一个问题,使numpy范围每次达到相同的数量,而不是像您所需的输出显示的那样按顺序递减),看看是否可以先在单个数组上进行补零操作,甚至可以将其作为for循环的一部分。
如果要创建填充的numpy数组,可以使用np.pad(X,pad_width=(before,after)),其中第二个参数允许指定在数组X前后添加多少个填充值。该函数的默认行为是在需要填充的位置添加零,这正是您所希望的。
至于让列表理解中的一切都正常工作,可以考虑使用enumerate(x)来帮助计算需要多少填充位以及在哪里停止计数。
bq9c1y662#
问题是你创建了一个numpy数组,然后你立即用list的list覆盖了你的变量。
无论如何,你应该用numpy broadcasting和
linspace
来处理这个问题,然后用布尔索引来屏蔽右下角的三角形:输出量: