Python 在numpy中,如何在条件下用其列或行索引替换值?
如果值>=1,如何用列索引替换nxn数组中的每个值,否则用行索引替换。 如果替换的值映射到其他1d数组并从中返回值,则效果更好Python 在numpy中,如何在条件下用其列或行索引替换值?,python,numpy,data-science,sparse-matrix,numpy-ndarray,Python,Numpy,Data Science,Sparse Matrix,Numpy Ndarray,如果值>=1,如何用列索引替换nxn数组中的每个值,否则用行索引替换。 如果替换的值映射到其他1d数组并从中返回值,则效果更好 value_array = np.array([200, 200, 300, 10]) arr = np.array( [[1, 1, .66, 20], [1, 1, .66, 20], [1.5, 1.5, 1, 30], [.05, .05, .03, 1]] ) 目标是获得一个大小相同的数组,其中包含value_数组中的值。 示例:
value_array = np.array([200, 200, 300, 10])
arr = np.array(
[[1, 1, .66, 20],
[1, 1, .66, 20],
[1.5, 1.5, 1, 30],
[.05, .05, .03, 1]]
)
目标是获得一个大小相同的数组,其中包含value_数组中的值。
示例:
- 在位置[0,2]处,值为.66,小于1,因此需要0的行索引。然后将0索引到值_数组中,结果矩阵位置[0,2]中的答案为200
- 在位置[0,3]处,值为20,大于1,因此需要3的列索引。然后将3索引到值_数组中,结果矩阵位置[0,3]中的答案为10
此外,要应用于大型阵列(1m x 1m)执行,需要以某种方式将其拆分为多个部分。使用
numpy的单向。选择:
conds = [arr>1, arr<1]
target = np.full(arr.shape, value_array)
np.select(conds, [target, target.T], arr)
使用np的另一个选项。其中
:
# I've rename value_array to v for simplicity.
# We use the broadcasting potential of numpy to get our result
res = np.where(arr>=1,v,v.reshape(len(v),1))
和res=
array([[200, 200, 200, 10],
[200, 200, 200, 10],
[200, 200, 300, 10],
[ 10, 10, 10, 10]])
此解决方案还使用更少的内存,因为您不需要存储中间结果。您需要conds=[arr>=1,arr您有没有建议在1m x 1m矩阵上执行此操作?将arr
和value\u array
拆分为子矩阵,但我们需要有关这些值实际存储方式的更多信息。如果每个值使用1个字节,那么您的矩阵应该包含~1TB的数据,这就是您拥有的,一个1TB的大文件?
array([[200, 200, 200, 10],
[200, 200, 200, 10],
[200, 200, 300, 10],
[ 10, 10, 10, 10]])