如何计算特定抽象 n 维 NumPy 数组中元素的数量?
How to count the amount of elements in a particular abstract n-dimensional NumPy array?
我打算计算一个特定的抽象 n 维数组中存储了多少整数(我不确定这个的正确术语)。例如,这是名为 'result':
的 numpy 数组的输出
In [1]: print(f"{result} \n {type(result)}")
Out [1]: [list([[[[2, 5], [6, 8]]], [[[[5, 7], [8, 9]]], [[[7, 8], [9, 9]]]]]) list([[[8, 9], [9, 2]]])]
<class 'numpy.ndarray'>
然后,如何计算该“结果”上的元素数。预期结果是 16,因为“结果”变量中存储了 16 个整数(2、5、6、8、...、8、9、9、2)?
result.size
会告诉您 NumPy 数组中有多少个元素(参见 numpy.ndarray.size)。问题是你的数组不仅仅是一个数组,但出于某种原因,它是一个列表列表的列表....
您需要做的第一件事是清理数据,这样您的数组中就没有这些 list
类型了。然后result.size
会做你想做的。
您有一个包含列表的 2 元素对象数据类型数组:
In [68]: result = np.array([list([[[[2, 5], [6, 8]]], [[[[5, 7], [8, 9]]], [[[7, 8], [9, 9]]]]]), list([[[8, 9
...: ], [9, 2]]])], object)
In [71]: print(result)
[list([[[[2, 5], [6, 8]]], [[[[5, 7], [8, 9]]], [[[7, 8], [9, 9]]]]])
list([[[8, 9], [9, 2]]])]
In [72]: result.shape
Out[72]: (2,)
第二个列表可以做成一个(2,2)数组,有4个元素:
In [73]: np.array(result[1])
Out[73]:
array([[[8, 9],
[9, 2]]])
In [74]: np.array(result[1]).size
Out[74]: 4
但是第一个元素中的列表嵌套更深:
In [75]: np.array(result[0], object)
Out[75]:
array([list([[[2, 5], [6, 8]]]),
list([[[[5, 7], [8, 9]]], [[[7, 8], [9, 9]]]])], dtype=object)
In [76]: np.array(np.array(result[0], object)[0])
Out[76]:
array([[[2, 5],
[6, 8]]])
In [77]: np.array(np.array(result[0], object)[1])
Out[77]:
array([[[[5, 7],
[8, 9]]],
[[[7, 8],
[9, 9]]]])
In [78]: _.shape
Out[78]: (2, 1, 2, 2)
一个是(2,1,2)形,另一个是(2,1,2,2)。那是4个和8个元素,所以总共16个。
我们可以编写一个遍历元素的递归函数,确定它是否到达“底部”或是否需要向下移动另一层。
还有一种“扁平化”列表的方法(itertools.chain
?),但即便如此我们也需要递归地使用它。
In [80]: import itertools
In [81]: list(itertools.chain(*result))
Out[81]:
[[[[2, 5], [6, 8]]],
[[[[5, 7], [8, 9]]], [[[7, 8], [9, 9]]]],
[[8, 9], [9, 2]]]
In [82]: len(_)
Out[82]: 3
In [83]: [list(itertools.chain(*x)) for x in Out[81]]
Out[83]: [[[2, 5], [6, 8]], [[[5, 7], [8, 9]], [[7, 8], [9, 9]]], [8, 9, 9, 2]]
In [84]: len(_)
Out[84]: 3
In [85]: list(itertools.chain(*Out[83]))
Out[85]: [[2, 5], [6, 8], [[5, 7], [8, 9]], [[7, 8], [9, 9]], 8, 9, 9, 2]
编辑
最近how to remove brackets from these individual elements?
得到一个副本 link How to make a flat list out of a list of lists?
它有许多函数(大部分是递归的)可以展平任意深度的列表。拿第一
In [100]: def flatten(itr):
...: for x in itr:
...: try:
...: yield from flatten(x)
...: except TypeError:
...: yield x
In [101]: list(flatten(result))
Out[101]: [2, 5, 6, 8, 5, 7, 8, 9, 7, 8, 9, 9, 8, 9, 9, 2]
In [102]: len(_)
Out[102]: 16
我打算计算一个特定的抽象 n 维数组中存储了多少整数(我不确定这个的正确术语)。例如,这是名为 'result':
的 numpy 数组的输出In [1]: print(f"{result} \n {type(result)}")
Out [1]: [list([[[[2, 5], [6, 8]]], [[[[5, 7], [8, 9]]], [[[7, 8], [9, 9]]]]]) list([[[8, 9], [9, 2]]])]
<class 'numpy.ndarray'>
然后,如何计算该“结果”上的元素数。预期结果是 16,因为“结果”变量中存储了 16 个整数(2、5、6、8、...、8、9、9、2)?
result.size
会告诉您 NumPy 数组中有多少个元素(参见 numpy.ndarray.size)。问题是你的数组不仅仅是一个数组,但出于某种原因,它是一个列表列表的列表....
您需要做的第一件事是清理数据,这样您的数组中就没有这些 list
类型了。然后result.size
会做你想做的。
您有一个包含列表的 2 元素对象数据类型数组:
In [68]: result = np.array([list([[[[2, 5], [6, 8]]], [[[[5, 7], [8, 9]]], [[[7, 8], [9, 9]]]]]), list([[[8, 9
...: ], [9, 2]]])], object)
In [71]: print(result)
[list([[[[2, 5], [6, 8]]], [[[[5, 7], [8, 9]]], [[[7, 8], [9, 9]]]]])
list([[[8, 9], [9, 2]]])]
In [72]: result.shape
Out[72]: (2,)
第二个列表可以做成一个(2,2)数组,有4个元素:
In [73]: np.array(result[1])
Out[73]:
array([[[8, 9],
[9, 2]]])
In [74]: np.array(result[1]).size
Out[74]: 4
但是第一个元素中的列表嵌套更深:
In [75]: np.array(result[0], object)
Out[75]:
array([list([[[2, 5], [6, 8]]]),
list([[[[5, 7], [8, 9]]], [[[7, 8], [9, 9]]]])], dtype=object)
In [76]: np.array(np.array(result[0], object)[0])
Out[76]:
array([[[2, 5],
[6, 8]]])
In [77]: np.array(np.array(result[0], object)[1])
Out[77]:
array([[[[5, 7],
[8, 9]]],
[[[7, 8],
[9, 9]]]])
In [78]: _.shape
Out[78]: (2, 1, 2, 2)
一个是(2,1,2)形,另一个是(2,1,2,2)。那是4个和8个元素,所以总共16个。
我们可以编写一个遍历元素的递归函数,确定它是否到达“底部”或是否需要向下移动另一层。
还有一种“扁平化”列表的方法(itertools.chain
?),但即便如此我们也需要递归地使用它。
In [80]: import itertools
In [81]: list(itertools.chain(*result))
Out[81]:
[[[[2, 5], [6, 8]]],
[[[[5, 7], [8, 9]]], [[[7, 8], [9, 9]]]],
[[8, 9], [9, 2]]]
In [82]: len(_)
Out[82]: 3
In [83]: [list(itertools.chain(*x)) for x in Out[81]]
Out[83]: [[[2, 5], [6, 8]], [[[5, 7], [8, 9]], [[7, 8], [9, 9]]], [8, 9, 9, 2]]
In [84]: len(_)
Out[84]: 3
In [85]: list(itertools.chain(*Out[83]))
Out[85]: [[2, 5], [6, 8], [[5, 7], [8, 9]], [[7, 8], [9, 9]], 8, 9, 9, 2]
编辑
最近how to remove brackets from these individual elements?
得到一个副本 link How to make a flat list out of a list of lists?
它有许多函数(大部分是递归的)可以展平任意深度的列表。拿第一
In [100]: def flatten(itr):
...: for x in itr:
...: try:
...: yield from flatten(x)
...: except TypeError:
...: yield x
In [101]: list(flatten(result))
Out[101]: [2, 5, 6, 8, 5, 7, 8, 9, 7, 8, 9, 9, 8, 9, 9, 2]
In [102]: len(_)
Out[102]: 16