由另一个数组索引的两个numpy数组的元素方式最小值

时间:2018-07-08 12:30:50

标签: python python-3.x numpy numpy-broadcasting numpy-ndarray

我有三个形状的数组:

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个数组)。

2 个答案:

答案 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)

使用该indab中每列选择一行:

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]