如何从元素为整数的数组创建整数 numpy 二维索引数组?
How to create an integer numpy 2darray of indexes from ndarray where elements are integers?
我正在尝试创建一个形状为 n x k 的 2d numpy 数组,其中 n 是给定的 ndarray 的维数,k 是 ndarray 中整数元素的数量。返回数组中的每一行都应包含条件在相关维度上成立的索引。
比如ndarray是:
array([[ 0. , -0.36650892, -0.51839849, 4.55566517, 4. ],
[ 5.21031078, 6.29935488, 8.29787346, 7.03293348, 8.74619707],
[ 9.36992033, 11. , 11.88485714, 12.98729128, 13.98447014],
[14. , 16.71828376, 16.15909201, 17.86503506, 19.12607872]])
同样,条件是如果元素是一个整数,那么返回的数组应该是:
array([[0,0,2,3],
[0,4,1,0]])
请注意,对于第 0 行,我们需要第 0 个和第 4 个元素,因此我们得到 [0,0,....],[0,4,...]
等等。
我考虑过创建一个与 arr
形状相同的新数组,其中整数元素位置为 True,其他位置为 False。不过不确定从哪里开始。
假设输入数组为 a
,您可以与舍入值进行比较以识别整数,使用 numpy.where
获取它们的索引并使用 np.vstack
形成最终数组:
np.vstack(np.where(a==a.round()))
输出:
array([[0, 0, 2, 3],
[0, 4, 1, 0]])
你可以这样做:
import numpy as np
a = np.array([[ 0. , -0.36650892, -0.51839849, 4.55566517, 4. ],
[ 5.21031078, 6.29935488, 8.29787346, 7.03293348, 8.74619707],
[ 9.36992033, 11. , 11.88485714, 12.98729128, 13.98447014],
[14. , 16.71828376, 16.15909201, 17.86503506, 19.12607872]])
# check where the integer of a value is equal the value
mask = np.int_(a) == a
# get indexes where the mask is true
where = np.where(mask)
# make the output into an array with the shape you wanted
output = np.stack([where[0], where[1]])
print(output)
输出:
array([[0, 0, 2, 3],
[0, 4, 1, 0]], dtype=int64)
我正在尝试创建一个形状为 n x k 的 2d numpy 数组,其中 n 是给定的 ndarray 的维数,k 是 ndarray 中整数元素的数量。返回数组中的每一行都应包含条件在相关维度上成立的索引。 比如ndarray是:
array([[ 0. , -0.36650892, -0.51839849, 4.55566517, 4. ],
[ 5.21031078, 6.29935488, 8.29787346, 7.03293348, 8.74619707],
[ 9.36992033, 11. , 11.88485714, 12.98729128, 13.98447014],
[14. , 16.71828376, 16.15909201, 17.86503506, 19.12607872]])
同样,条件是如果元素是一个整数,那么返回的数组应该是:
array([[0,0,2,3],
[0,4,1,0]])
请注意,对于第 0 行,我们需要第 0 个和第 4 个元素,因此我们得到 [0,0,....],[0,4,...]
等等。
我考虑过创建一个与 arr
形状相同的新数组,其中整数元素位置为 True,其他位置为 False。不过不确定从哪里开始。
假设输入数组为 a
,您可以与舍入值进行比较以识别整数,使用 numpy.where
获取它们的索引并使用 np.vstack
形成最终数组:
np.vstack(np.where(a==a.round()))
输出:
array([[0, 0, 2, 3],
[0, 4, 1, 0]])
你可以这样做:
import numpy as np
a = np.array([[ 0. , -0.36650892, -0.51839849, 4.55566517, 4. ],
[ 5.21031078, 6.29935488, 8.29787346, 7.03293348, 8.74619707],
[ 9.36992033, 11. , 11.88485714, 12.98729128, 13.98447014],
[14. , 16.71828376, 16.15909201, 17.86503506, 19.12607872]])
# check where the integer of a value is equal the value
mask = np.int_(a) == a
# get indexes where the mask is true
where = np.where(mask)
# make the output into an array with the shape you wanted
output = np.stack([where[0], where[1]])
print(output)
输出:
array([[0, 0, 2, 3],
[0, 4, 1, 0]], dtype=int64)