使用 Python 创建值小于阈值的数组
Creating array with values less than the threshold using Python
我想在第一行中选择最小值,然后在扫描后续行时选择小于此最小值的 select 值。输出应如下所示。
import numpy as np
a = np.array([[0.4234101 , 0.73587042, 0.81, 0.83202077, 0.73592897],
[0.45714687, 0.13144797, 0.67110076, 0.70283126, 0.32859529],
[0.30888356, 0.84115786, 0.24648344, 0.4963486 , 0.42780253],
[0.10956774, 0.49696239, 0.17086982, 0.34758674, 0.6332388 ],
[0.69931352, 0.72449178, 0.98831224, 0.20775389, 0.19041985]])
print(a<0.4234101)
期望的输出是
array([0.4234101 , 0.13144797, 0.32859529, 0.30888356, 0.24648344,
0.10956774, 0.17086982, 0.34758674, 0.20775389, 0.19041985])
您可以索引第一行,找到它的最小值并创建一个布尔掩码来过滤 a
。
a[a < a[0].min()]
如果您希望最小值作为最终输出的一部分,那么您可以将其连接到上面的输出:
first_row_min = a[0].min()
np.r_[first_row_min, a[a < first_row_min]]
输出:
array([0.4234101 , 0.13144797, 0.32859529, 0.30888356, 0.24648344,
0.10956774, 0.17086982, 0.34758674, 0.20775389, 0.19041985])
尝试:
print([i for i in a.reshape(-1,) if i<0.42])
或者如果您希望它链接到第一个值:
print([i for i in a.reshape(-1,) if i<a.reshape(-1,)[0]])
您可能需要的方法是 np.nditer()
它迭代多维数组的单个元素
import numpy as np
a = np.array([[0.4234101 , 0.73587042, 0.81, 0.83202077, 0.73592897],
[0.45714687, 0.13144797, 0.67110076, 0.70283126, 0.32859529],
[0.30888356, 0.84115786, 0.24648344, 0.4963486 , 0.42780253],
[0.10956774, 0.49696239, 0.17086982, 0.34758674, 0.6332388 ],
[0.69931352, 0.72449178, 0.98831224, 0.20775389, 0.19041985]])
values = []
min = a[0].min()
for element in np.nditer(a[1:]):
if element < min:
values.append(element.item(0))
可能的解决方案之一是:
获取第 0 行的最小值:
a0min = a[0].min()
获取以下行:
a1 = a[1:]
得到结果:
result = np.insert(a1[a1 < a0min], 0, a0min)
即从 a1 中获取想要的元素(后续行)
并在开头插入初始行的最小值。
结果是:
array([0.4234101 , 0.13144797, 0.32859529, 0.30888356, 0.24648344,
0.10956774, 0.17086982, 0.34758674, 0.20775389, 0.19041985])
您不需要对源数组进行任何显式迭代,因为它是
Numpy.
在后台执行
我想在第一行中选择最小值,然后在扫描后续行时选择小于此最小值的 select 值。输出应如下所示。
import numpy as np
a = np.array([[0.4234101 , 0.73587042, 0.81, 0.83202077, 0.73592897],
[0.45714687, 0.13144797, 0.67110076, 0.70283126, 0.32859529],
[0.30888356, 0.84115786, 0.24648344, 0.4963486 , 0.42780253],
[0.10956774, 0.49696239, 0.17086982, 0.34758674, 0.6332388 ],
[0.69931352, 0.72449178, 0.98831224, 0.20775389, 0.19041985]])
print(a<0.4234101)
期望的输出是
array([0.4234101 , 0.13144797, 0.32859529, 0.30888356, 0.24648344,
0.10956774, 0.17086982, 0.34758674, 0.20775389, 0.19041985])
您可以索引第一行,找到它的最小值并创建一个布尔掩码来过滤 a
。
a[a < a[0].min()]
如果您希望最小值作为最终输出的一部分,那么您可以将其连接到上面的输出:
first_row_min = a[0].min()
np.r_[first_row_min, a[a < first_row_min]]
输出:
array([0.4234101 , 0.13144797, 0.32859529, 0.30888356, 0.24648344,
0.10956774, 0.17086982, 0.34758674, 0.20775389, 0.19041985])
尝试:
print([i for i in a.reshape(-1,) if i<0.42])
或者如果您希望它链接到第一个值:
print([i for i in a.reshape(-1,) if i<a.reshape(-1,)[0]])
您可能需要的方法是 np.nditer() 它迭代多维数组的单个元素
import numpy as np
a = np.array([[0.4234101 , 0.73587042, 0.81, 0.83202077, 0.73592897],
[0.45714687, 0.13144797, 0.67110076, 0.70283126, 0.32859529],
[0.30888356, 0.84115786, 0.24648344, 0.4963486 , 0.42780253],
[0.10956774, 0.49696239, 0.17086982, 0.34758674, 0.6332388 ],
[0.69931352, 0.72449178, 0.98831224, 0.20775389, 0.19041985]])
values = []
min = a[0].min()
for element in np.nditer(a[1:]):
if element < min:
values.append(element.item(0))
可能的解决方案之一是:
获取第 0 行的最小值:
a0min = a[0].min()
获取以下行:
a1 = a[1:]
得到结果:
result = np.insert(a1[a1 < a0min], 0, a0min)
即从 a1 中获取想要的元素(后续行) 并在开头插入初始行的最小值。
结果是:
array([0.4234101 , 0.13144797, 0.32859529, 0.30888356, 0.24648344,
0.10956774, 0.17086982, 0.34758674, 0.20775389, 0.19041985])
您不需要对源数组进行任何显式迭代,因为它是 Numpy.
在后台执行