如何使用类似布尔型的方形对称numpy数组中的True值存储存储索引对?

我有一个Numpy Array,它的整数值为1或0(如有必要,可以将其强制转换为布尔值)。该数组是方形且对称的(请参见下面的注释),我想要一个出现1的索引列表:

需要注意的是array[i][j] == array[j][i]array[i][i] == 0设计。而且我不能有任何重复。

import numpy as np
array = np.array([
    [0, 0, 1, 0, 1, 0, 1],
    [0, 0, 1, 1, 0, 1, 0],
    [1, 1, 0, 0, 0, 0, 1],
    [0, 1, 0, 0, 1, 1, 0],
    [1, 0, 0, 1, 0, 0, 1],
    [0, 1, 0, 1, 0, 0, 0],
    [1, 0, 1, 0, 1, 0, 0]
])

我想要这样的结果(每个子列表的顺序都不重要,子列表中每个元素的顺序也不重要):

[
    [0, 2], 
    [0, 4], 
    [0, 6], 
    [1, 2], 
    [1, 3],
    [1, 5],
    [2, 6],
    [3, 4],
    [3, 5],
    [4, 6]
]

需要说明的另一点是,我不希望使用条件循环遍历所有索引两次,j<i因为数组的大小可能很大,但是我知道这是可能的-我编写了一个使用两个for循环的示例:

result = []
for i in range(array.shape[0]):
    for j in range(i):
        if array[i][j]:
            result.append([i, j])
print(pd.DataFrame(result).sort_values(1).values)


# using dataframes and arrays for formatting but looking for
# 'result' which is a list

# Returns (same as above but columns are the opposite way round):
[[2 0]
 [4 0]
 [6 0]
 [2 1]
 [3 1]
 [5 1]
 [6 2]
 [4 3]
 [5 3]
 [6 4]]
易山
idx = np.argwhere(array)
idx = idx[idx[:,0]<idx[:,1]]

另一种方式:

idx = np.argwhere(np.triu(array))

输出:

[[0 2]
 [0 4]
 [0 6]
 [1 2]
 [1 3]
 [1 5]
 [2 6]
 [3 4]
 [3 5]
 [4 6]]

比较

#@bousof solution
def method1(array):
  return np.vstack(np.where(np.logical_and(array, np.diff(np.ogrid[:array.shape[0],:array.shape[0]])[0]>=0))).transpose()[:,::-1]

#Also mentioned by @hpaulj
def method2(array):
  return np.argwhere(np.triu(array))

def method3(array):
  idx = np.argwhere(array)
  return idx[idx[:,0]<idx[:,1]]

#The original method in question by OP(d-man)
def method4(array):
  result = []
  for i in range(array.shape[0]):
      for j in range(i):
          if array[i][j]:
              result.append([i, j])
  return result

#suggestd by @bousof in comments
def method5(array):
  return np.vstack(np.where(np.triu(array))).transpose()

inputs = [np.random.randint(0,2,(n,n)) for n in [10,100,1000,10000]]

好像方法1方法2method5是略快于大型阵列,而方法3是更小的情况下,速度快:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

在布尔列表中获取True值的索引

来自分类Dev

如何在Android中使用SharedPreferences存储布尔值?

来自分类Dev

如何使用“ SecItemAdd”在OS X中存储对称密钥?

来自分类Dev

Python / Numpy:如何避免存储布尔索引的子数组?

来自分类Dev

numpy中的多维布尔数组索引

来自分类Dev

将中间值存储在numpy数组中

来自分类Dev

我应该如何在mongodb中存储布尔值?

来自分类Dev

使用Angular更改存储在JSON中的布尔值?

来自分类Dev

将Numpy数组索引存储在变量中

来自分类Dev

如何将排序值的索引键存储在数组中?

来自分类Dev

从布尔数组返回索引值数组,其中true

来自分类Dev

使用布尔数组的Numpy索引

来自分类Dev

使用布尔型掩码为numpy数组分配值:如何?

来自分类Dev

如何删除numpy数组中的非对称对?

来自分类Dev

在索引处查找对象值,并使用swift将其存储在其他数组中

来自分类Dev

如何在Elasticsearch中存储布尔数组并执行XOR操作?

来自分类Dev

如何在字典中存储数组值?

来自分类Dev

数组索引超出计数java中的“ true”布尔值

来自分类Dev

Python / Numpy:如何避免存储布尔索引的子数组?

来自分类Dev

如何使用Rails在Cookie中存储值数组?

来自分类Dev

在numpy数组中存储和查找更高价值的索引

来自分类Dev

Matplotlib:如何使用数组中存储的值进行绘图?

来自分类Dev

使用本地存储存储用户选择的CSS样式(如何?)

来自分类Dev

从布尔数组返回索引值数组,其中true

来自分类Dev

如何在整数中存储数组的索引?

来自分类Dev

布尔索引将列值存储为python中的变量

来自分类Dev

如何使用php将json值存储到数组中?

来自分类Dev

如何在 JavaScript 的数组中存储值?

来自分类Dev

如何快速在 NSUserDefaults 中存储值数组

Related 相关文章

  1. 1

    在布尔列表中获取True值的索引

  2. 2

    如何在Android中使用SharedPreferences存储布尔值?

  3. 3

    如何使用“ SecItemAdd”在OS X中存储对称密钥?

  4. 4

    Python / Numpy:如何避免存储布尔索引的子数组?

  5. 5

    numpy中的多维布尔数组索引

  6. 6

    将中间值存储在numpy数组中

  7. 7

    我应该如何在mongodb中存储布尔值?

  8. 8

    使用Angular更改存储在JSON中的布尔值?

  9. 9

    将Numpy数组索引存储在变量中

  10. 10

    如何将排序值的索引键存储在数组中?

  11. 11

    从布尔数组返回索引值数组,其中true

  12. 12

    使用布尔数组的Numpy索引

  13. 13

    使用布尔型掩码为numpy数组分配值:如何?

  14. 14

    如何删除numpy数组中的非对称对?

  15. 15

    在索引处查找对象值,并使用swift将其存储在其他数组中

  16. 16

    如何在Elasticsearch中存储布尔数组并执行XOR操作?

  17. 17

    如何在字典中存储数组值?

  18. 18

    数组索引超出计数java中的“ true”布尔值

  19. 19

    Python / Numpy:如何避免存储布尔索引的子数组?

  20. 20

    如何使用Rails在Cookie中存储值数组?

  21. 21

    在numpy数组中存储和查找更高价值的索引

  22. 22

    Matplotlib:如何使用数组中存储的值进行绘图?

  23. 23

    使用本地存储存储用户选择的CSS样式(如何?)

  24. 24

    从布尔数组返回索引值数组,其中true

  25. 25

    如何在整数中存储数组的索引?

  26. 26

    布尔索引将列值存储为python中的变量

  27. 27

    如何使用php将json值存储到数组中?

  28. 28

    如何在 JavaScript 的数组中存储值?

  29. 29

    如何快速在 NSUserDefaults 中存储值数组

热门标签

归档