Python 在numpy中,如何在条件下用其列或行索引替换值?

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_数组中的值。 示例:

如果值>=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_数组中的值。 示例:

  • 在位置[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]])