如何从元素为整数的数组创建整数 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)