Python 如何在numpy中迭代一维和二维数组的列?

Python 如何在numpy中迭代一维和二维数组的列?,python,numpy,Python,Numpy,我有一个函数,它想在numpy数组的列上测试谓词,假设它们的总和为10。该函数将采用一维或二维数组,其中一维数组将被视为单个列 对于2D情况,我可以执行以下操作: python 对于两维数组中的列。T: 断言和(列)=10 我知道对于1D的情况,我可以简单地做到: python 断言和(一个dim数组)==10 但是有没有一种方法可以使单个代码路径与数组的类型无关,即我不必打开len(my_array.shape)并使用上面的任何一个代码片段,比如: python 对于一维数组或二维数组中的

我有一个函数,它想在numpy数组的列上测试谓词,假设它们的总和为10。该函数将采用一维或二维数组,其中一维数组将被视为单个列

对于2D情况,我可以执行以下操作:
python
对于两维数组中的列。T:
断言和(列)=10
我知道对于1D的情况,我可以简单地做到:
python
断言和(一个dim数组)==10

但是有没有一种方法可以使单个代码路径与数组的类型无关,即我不必打开
len(my_array.shape)
并使用上面的任何一个代码片段,比如:
python
对于一维数组或二维数组中的列。cols():
断言和(列)=10

对于1D的情况,我们只会通过一次循环。

你是指类似的情况吗

import numpy as np

def test(arr):
    if np.ndim(arr) > 1:
        arr = arr.T

    for col in arr:
        assert np.sum(col) == 10

arr1 = np.array([1,2,3])
arr2 = np.array([[1,2,3],[4,5,6]])
print(test(arr1))
print
print(test(arr2))

你的意思是这样的

import numpy as np

def test(arr):
    if np.ndim(arr) > 1:
        arr = arr.T

    for col in arr:
        assert np.sum(col) == 10

arr1 = np.array([1,2,3])
arr2 = np.array([[1,2,3],[4,5,6]])
print(test(arr1))
print
print(test(arr2))

在这两种情况下,以下内容都会生成列和的一维数组:

column_totals = one_or_two_dim_array.sum(axis=0).flatten()
然后,如果需要,您可以在
列\u totals
中的值上循环,或者一次性断言所有比较:

assert np.all(column_totals == 10)
事实上,整个事情可以简化为一行:

assert np.all(one_or_two_dim_array.sum(axis=0) == 10)

在这两种情况下,以下内容都会生成列和的一维数组:

column_totals = one_or_two_dim_array.sum(axis=0).flatten()
然后,如果需要,您可以在
列\u totals
中的值上循环,或者一次性断言所有比较:

assert np.all(column_totals == 10)
事实上,整个事情可以简化为一行:

assert np.all(one_or_two_dim_array.sum(axis=0) == 10)