Python 基于另一个一维阵列成形numpy二维阵列
我有Python 基于另一个一维阵列成形numpy二维阵列,python,arrays,numpy,numpy-ndarray,Python,Arrays,Numpy,Numpy Ndarray,我有(n,m)数组arr1,其中n将近250万,并且m=100。另一个arr2是(n,1)我想修改arr1,以便: arr1[i, j] = arr1[i, j], if j <= arr2[i] = nan , otherwise 在这种情况下,期望输出为: array([[147, 46, 168], [nan, nan, nan], [ 21, 245, nan], [246, nan, nan]])
(n,m)
数组arr1
,其中n
将近250万,并且m=100
。另一个arr2
是(n,1)
我想修改
arr1
,以便:
arr1[i, j] = arr1[i, j], if j <= arr2[i]
= nan , otherwise
在这种情况下,期望输出为:
array([[147, 46, 168],
[nan, nan, nan],
[ 21, 245, nan],
[246, nan, nan]])
尝试速度的真实示例是
import numpy as np
arr1 = np.random.randint(500, size=(2500000, 100))
arr2 = np.random.randint(101, size=(2500000,))
在您的示例中:
arr2[:,None]在您的示例中:
arr2[:,None]那么arr2
是一个整数数组吗?@WillemVanOnsem是的,但是arr1
也可以是浮动的。arr2
的随机范围不应该是100而不是100吗?否则,我们将得到一个超出范围的错误,对吗?@RolandDeschain我假设索引从1开始,而不是从0开始。但是如果假设从0开始,那么是100,而不是100101@GerryPython是基于0的索引。所以你想要100而不是101Soarr2
是一个整数数组吗?@WillemVanOnsem是的,但是arr1
也可以是浮点数。arr2
的随机范围不应该是100而不是100吗?否则,我们将得到一个超出范围的错误,对吗?@RolandDeschain我假设索引从1开始,而不是从0开始。但是如果假设从0开始,那么是100,而不是100101@GerryPython是基于0的索引。所以你想要100而不是101
import numpy as np
arr1 = np.random.randint(500, size=(2500000, 100))
arr2 = np.random.randint(101, size=(2500000,))
mask = arr2[:,None] <= list(range(arr1.shape[1]))
result = arr1.astype(float)
result[mask] = np.nan