用多维数组调用二维数组元素
Calling 2D array elements with multi dimensional array
我在 Python 中使用了一个函数,其中 returns 矩阵中周围元素的位置如下:
import numpy as np
neighbours(1,0,len(im2),len(im2),size=4)
哪个 returns 像这样:
>>> [(0, 0), (2, 0), (1, 1)]
但是当我想从矩阵本身调用实际值时,我得到了一个错误。例如:
matrix[neighbours(1,0,len(im2),len(im2),size=4)]
IndexError: too many indices for array
这显然是因为我传递给矩阵的列表,但如果我将它更改为数组,我会得到一个垂直数组:
np.array(neighbours(1,0,len(im2),len(im2),size=4))
array([[0, 0],
[2, 0],
[1, 1]])
传递给矩阵时不给出 3 个值:
matrix[np.array(neighbours(1,0,len(im2),len(im2),size=4))]
array([[[ 1., 1., 1., ..., 1., 1., -1.],
[ 1., 1., 1., ..., 1., 1., -1.]],
[[ 1., 1., 1., ..., 1., 1., 1.],
[ 1., 1., 1., ..., 1., 1., -1.]],
[[ 1., 1., 1., ..., 1., 1., -1.],
[ 1., 1., 1., ..., 1., 1., -1.]]])
任何解决此问题的帮助都会很棒!我真的试图避免使用循环按顺序调用值,因为它会大大降低我的代码速度。
当然会报错。您正在尝试使用它访问矩阵的元素。即方括号
matrix[neighbours(1,0,len(im2),len(im2),size=4)]
使用下面给出的普通括号。
import numpy as np
a = [(0, 0), (2, 0), (1, 1)]
m = np.matrix(a)
print(m)
高级索引 arrays.indexing 似乎在单独的元组或数组中使用行、列索引
ni = [(0, 0), (2, 0), (1, 1)]
ary = np.arange(12).reshape(3,4)
ary
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
rows, cols = zip(*ni) # list "transpose" with zip, unpacked to rows, cols
ary[rows, cols]
array([0, 8, 5])
我在 Python 中使用了一个函数,其中 returns 矩阵中周围元素的位置如下:
import numpy as np
neighbours(1,0,len(im2),len(im2),size=4)
哪个 returns 像这样:
>>> [(0, 0), (2, 0), (1, 1)]
但是当我想从矩阵本身调用实际值时,我得到了一个错误。例如:
matrix[neighbours(1,0,len(im2),len(im2),size=4)]
IndexError: too many indices for array
这显然是因为我传递给矩阵的列表,但如果我将它更改为数组,我会得到一个垂直数组:
np.array(neighbours(1,0,len(im2),len(im2),size=4))
array([[0, 0],
[2, 0],
[1, 1]])
传递给矩阵时不给出 3 个值:
matrix[np.array(neighbours(1,0,len(im2),len(im2),size=4))]
array([[[ 1., 1., 1., ..., 1., 1., -1.],
[ 1., 1., 1., ..., 1., 1., -1.]],
[[ 1., 1., 1., ..., 1., 1., 1.],
[ 1., 1., 1., ..., 1., 1., -1.]],
[[ 1., 1., 1., ..., 1., 1., -1.],
[ 1., 1., 1., ..., 1., 1., -1.]]])
任何解决此问题的帮助都会很棒!我真的试图避免使用循环按顺序调用值,因为它会大大降低我的代码速度。
当然会报错。您正在尝试使用它访问矩阵的元素。即方括号
matrix[neighbours(1,0,len(im2),len(im2),size=4)]
使用下面给出的普通括号。
import numpy as np
a = [(0, 0), (2, 0), (1, 1)]
m = np.matrix(a)
print(m)
高级索引 arrays.indexing 似乎在单独的元组或数组中使用行、列索引
ni = [(0, 0), (2, 0), (1, 1)]
ary = np.arange(12).reshape(3,4)
ary
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
rows, cols = zip(*ni) # list "transpose" with zip, unpacked to rows, cols
ary[rows, cols]
array([0, 8, 5])