Python在每列到达一个数字时进行检查,并保存该列的数字

Python在每列到达一个数字时进行检查,并保存该列的数字,python,numpy,Python,Numpy,我有一个使用numpy split填充的数组,如下所示 [array([3, 0, 0]), array([1, 1, 1]), array([2 , 2, 4]), array([0, 1, 2]), array([0, 1, 2]), array([0, 2, 2])] 我想检查每列何时达到数字3或更高,然后将该列数字另存为另一个数组或列表。我还希望它写出最后一列的数字,如果它从未超过3。所以这个例子的答案应该是 [1, 6, 3] 这意味着第一列到达第1行的数字3,第2列从未到达数字3

我有一个使用numpy split填充的数组,如下所示

[array([3, 0, 0]),
array([1, 1, 1]),
array([2 , 2, 4]),
array([0, 1, 2]),
array([0, 1, 2]),
array([0, 2, 2])]
我想检查每列何时达到数字3或更高,然后将该列数字另存为另一个数组或列表。我还希望它写出最后一列的数字,如果它从未超过3。所以这个例子的答案应该是

[1, 6, 3]
这意味着第一列到达第1行的数字3,第2列从未到达数字3,第3列到达第3行的数字3


我尝试了几种方法,但没有一种有效。

您可以使用
numpy
中的
argmax
来实现这一点:

import numpy as np

split_data = [
    np.array([3, 0, 0]),
    np.array([1, 1, 1]),
    np.array([2, 2, 4]),
    np.array([0, 1, 2]),
    np.array([0, 1, 2]),
    np.array([0, 2, 2]),
]
print(f"split_data[0].shape {split_data[0].shape}")
print(f"split_data\n{split_data}")

# convert the list of arrays to a single matrix
data = np.stack(split_data)
print(f"data.shape {data.shape}")
print(f"data\n{data}")

# create a boolean array where the data is over 3
over3 = data >= 3
print(f"over3\n{over3}")

# this finds out the row where 3 was reached
index = np.argmax(over3, axis=0)
print(f"index {index}")

# you start counting from one, so increase that
index = index + 1
print(f"index increased {index}")

# this finds out if a column never reached 3
never = np.sum(over3, axis=0)
print(f"never {never}")

# if the sum is 0, then it never went over
# use that to update the index found
index[never == 0] = data.shape[0]
print(f"index {index}")
那会产生什么

split_data[0].shape (3,)
split_data
[array([3, 0, 0]), array([1, 1, 1]), array([2, 2, 4]), array([0, 1, 2]), array([0, 1, 2]), array([0, 2, 2])]
data.shape (6, 3)
data
[[3 0 0]
 [1 1 1]
 [2 2 4]
 [0 1 2]
 [0 1 2]
 [0 2 2]]
over3
[[ True False False]
 [False False False]
 [False False  True]
 [False False False]
 [False False False]
 [False False False]]
index [0 0 2]
index increased [1 1 3]
never [1 0 1]
index [1 6 3]

干杯

PS:当问一个问题时,发布你的尝试:你的错误可能很小,一个小的修复可以解决这个问题。为什么阵列被分割?当它们合并时,这样做要容易得多。另外,您知道在python中索引通常是以零为基础的吗?这似乎适用于我的示例代码。虽然它不适用于我的真实代码。最初我有一个长行向量,我把它分成多行,如下所示:
data=np.split(oldData,99)
当我打印出来时,我得到以下内容:
[array([0.94811916,0.93811916,0.92811916,0.54811916,0.54811916,0.54811916,0.54811916,0.54811916]),array([0.95600181、0.94600181、0.93600181、0.55600181、0.55600181、.+97行]
使用代码时出现的错误是“TypeError:”>=“在'list'和'int'实例之间不受支持”。啊,是的,很抱歉,我已经开始使用形状为
(6,3)的
numpy
矩阵
当您有一个带有shape
(3,)
的数组python列表时。您可以使用
np.stack
从列表中构建矩阵,我已经更新了答案。非常感谢,这很有效!