【发布时间】:2019-08-30 01:47:20
【问题描述】:
作为一个更大项目的一部分,我正在生成一堆不同大小的不同坐标列表,当尝试将这些坐标列表用作数组的索引时,我发现了一些奇怪的行为。这些坐标列表是在程序中生成的,所以我不知道它们会持续多久。请参阅下面的示例:
t = np.zeros((5,5))
coord = [[2,3], [1,2]]
t[coord] = 30
print(t)
输出:
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 30. 0. 0. 0.]
[ 0. 0. 30. 0. 0.]
[ 0. 0. 0. 0. 0.]]
但是如果列表只有一个点:
t = np.zeros((5,5))
coord = [[2,3]]
t[coord] = 30
print(t)
输出:
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[30. 30. 30. 30. 30.]
[30. 30. 30. 30. 30.]
[ 0. 0. 0. 0. 0.]]
然后,如果我将列表转换为 numpy 数组,它会进一步分解:
t = np.zeros((5,5))
coord = np.array([[2,3], [1,2]])
t[coord] = 30
print(t)
输出:
[[ 0. 0. 0. 0. 0.]
[30. 30. 30. 30. 30.]
[30. 30. 30. 30. 30.]
[30. 30. 30. 30. 30.]
[ 0. 0. 0. 0. 0.]]
我该如何处理,所以即使只有一个元素并且它是一个 numpy 数组,我也总是得到第一个输出?
谢谢!
编辑:
目前在我的代码中发生的事情是一个程序返回一个 numpy 点数组:
array([[ 9, 5, 0],
[ 4, 2, 2],
[11, 4, 2],
[ 5, 7, 2],
[11, 12, 2],
[12, 9, 0],
[ 5, 4, 7],
[ 3, 2, 1],
...
然后我想用它来改变更大的 14 * 14 * 9 矩阵中的这些坐标点。 big_matrix[坐标] = 0
EDIT2:基于@hpaulj 的评论
这是一个完整问题的示例:
coord = np.array([[ 4, 7, 0],
[ 9, 6, 1],
[ 8, 2, 0],
[ 8, 7, 6],
[ 3, 10, 4],
[ 6, 4, 3],
[10, 10, 3],
[ 3, 2, 1]], dtype='int32')
matrix[coord]
返回:
array([[[[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
...,
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.],
[0., 0., 0., ..., 0., 0., 0.]],
【问题讨论】:
-
您可能需要考虑使用Numpy slice notation,它应该可以满足您的需求。
-
我试图解释在您的各种情况下发生了什么,但我突然想到我不确定您想要什么。您可能需要演示所需的结果,无论这意味着将值分配给特定点还是特定行。
-
@hpaulj 我编辑回答你的问题。
-
您的示例是 2x2,在二维数组中可以以任何一种方式解释。用于 3d 案例的 (8,3) 数组的新示例仅以一种方式工作,作为一组 8 个点。