我想编写一个带有numpy数组的函数,并且想检查它是否满足要求。让我感到困惑的一件事是:
np.array([1,2,3]).shape = np.array([[1,2,3],[2,3],[2,43,32]]) = (3,)
[1,2,3]
应该被允许,而[[1,2,3],[2,3],[2,43,32]]
则不允许。
允许的形状:
[0, 1, 2, 3, 4]
[0, 1, 2]
[[1],[2]]
[[1, 2], [2, 3], [3, 4]]
不允许:
[] (empty array is not allowed)
[[0], [1, 2]] (inner dimensions must have same size 1!=2)
[[[4,5,6],[4,3,2][[2,3,2],[2,3,4]]] (more than 2 dimension)
答案 0 :(得分:0)
您应该从定义形状开始。我试图从问题中理解它,如果不正确,请添加更多详细信息。
因此,这里我们有(1)不允许为空数组,并且(2)不得超过二维。它的翻译方式如下:
def is_allowed(arr):
return arr.shape != (0, ) and len(arr.shape) <= 2
第一个条件只是将数组的形状与空数组的形状进行比较。第二个条件检查数组的维数不超过二维。
内部尺寸存在问题。您作为示例提供的某些列表不是numpy数组。如果强制转换np.array([[1,2,3],[2,3],[2,43,32]])
,则会得到一个数组,其中每个元素都是列表。它不是可以直接访问所有元素的“实际” numpy数组。参见示例:
>>> np.array([[1,2,3],[2,3],[2,43,32]])
array([list([1, 2, 3]), list([2, 3]), list([2, 43, 32])], dtype=object)
>>> np.array([[1,2,3],[2,3, None],[2,43,32]])
array([[1, 2, 3],
[2, 3, None],
[2, 43, 32]], dtype=object)
因此,我建议(如果您使用常规列表进行操作)检查所有数组的长度是否相同,但不要使用numpy。