我有三个形状的数组:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.example.yasin.taksmssender"
minSdkVersion 14
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.android.support:design:27.1.1'
}
我如下计算了另一个数组IND []。 IND []的每个元素是A的最大元素的索引(一列中每10个值的最大值),
A = a = np.random.exponential(1, [10, 1000000]) # of shape (10, 1000000)
B = a = np.random.exponential(1, [10, 1000000]) # of shape (10, 1000000)
我想计算另一个数组C,该数组包含由IND []的值指定的行号A和B的元素方式的最小值。因此,C数组的形状应为(1,1000000)。我想避免循环。我尝试了以下操作,但是C的值不正确。
IND = np.argmax(snr_sr, axis=0) # of shape (1000000,)
抱歉,由于数组很大,无法发布。你可以拿任何 形状相同的数组。
首次编辑: 有人为我提供了正确的答案,但他将其删除了(不知道为什么吗?) 无论如何,我在他删除答案之前复制了答案。请再次发布,以便我将其标记为正确。 (对他来说:为简单起见,他取了1100个数组)。
答案 0 :(得分:1)
我缩短了您的数组:
a = np.random.exponential(1, [10, 100]) # of shape (10, 100)
b = np.random.exponential(1, [10, 100])
ind=np.argmax(a,axis=0)
使用该ind
在a
和b
中每列选择一行:
a_ = a[ind,np.arange(a.shape[1])]
b_ = b[ind,np.arange(a.shape[1])]
然后计算c
:
c=np.minimum(a_, b_)
答案 1 :(得分:0)
注意:我不擅长numpy,因此可能会有更有效的解决方案。
首先按行查找A和B中的最小值:
minAB = np.min(np.minimum(A, B), axis=1)
然后使用ind
对该数组进行索引:
C = minAB[ind]