提问人:bennu777 提问时间:8/4/2022 更新时间:8/4/2022 访问量:45
在 python 循环期间使用切片的数组的形状大小的值错误
Value error for shape size of array with slicing during a loop in python
问:
我遇到一个错误,指示在尝试使用 slice 方法和 for 循环将值插入到预定义的 0 值数组中时,数组大小不同。在三个示例数组中,.但是当开始和停止值增加 +1 或减少 -1 时会出现问题,这很奇怪,因为正如我提到的,开始和停止之间的差异总是相同的。[start:stop]
stop-start=5
附件是我尝试过的三个示例,只有第三个示例可以正常工作,而其他两个则显示以下错误:ValueError: could not broadcast input array from shape (y,1) into shape (x,1)
# First example:
arr0 = np.array([38, 78, 118, 158, 158, 198, 238, 278])
arr1 = np.array([43, 83, 123, 163, 163, 203, 243, 283])
res1 = [np.array([0, -0.5, -1, -0.5, 0])[:, None], np.array([0, -1., -2., -1., 0])[:, None]]
nod1 = np.array([0, 0, 0, 0, 1, 1, 1, 1])
out1 = []
for i in range(0, 8):
print(i)
out1.append(np.zeros((281, 1)))
for i, j, k, l in zip(range(0, 8), nod1, arr0, arr1):
print(i, j, k, l)
out1[i][k:l] = res1[j]
"Error: ValueError: could not broadcast input array from shape (5,1) into shape (3,1)"
# Second example:
arr2 = arr0 - 1
arr3 = arr1 - 1
out1 = []
for i in range(0, 8):
print(i)
out1.append(np.zeros((281, 1)))
for i, j, k, l in zip(range(0, 8), nod1, arr2, arr3):
print(i, j, k, l)
out1[i][k:l] = res1[j]
"Error: ValueError: could not broadcast input array from shape (5,1) into shape (4,1)"
# Third example:
arr4 = arr0 - 2
arr5 = arr1 - 2
out1 = []
for i in range(0, 8):
print(i)
out1.append(np.zeros((281, 1)))
for i, j, k, l in zip(range(0, 8), nod1, arr4, arr5):
print(i, j, k, l)
out1[i][k:l] = res1[j]
"Passed, both sides have shape (5, 1)"
我的问题是导致出现此错误的原因是什么?
从我在了解切片中读到的内容来看,一位用户指出:
当然,如果 ,那么终点将是 略低于 .
(stop-start)%stride != 0
start-1
,但不幸的是,我在示例中看不到这一点。
我会请求您的帮助和讨论如何克服这个问题,因为这些值对我来说很重要,以便确定在具有 0 个值的预定义数组中放置新值的确切位置。[start:stop]
答: 暂无答案
评论