मेरे पास दो द्वि-आयामी सरणी हैं, और मुझे दूसरी सरणी के माध्यम से फ़िल्टरिंग एक नई सरणी बनाना है जहां पहला कॉलम इंडेक्स मेल खाता है। सरणियाँ विभिन्न आकार के हैं।

मूल रूप से विचार इस प्रकार है:

file A

#x   y
1   2
3   4
2   2
5   4
6   4
7   4


file B

#x1    y1
0       1
1       1
11      1
5       1
7       1
My expected output 2D array should look like

#newx     newy
1         1
5         1
7         1

मैंने इसे निम्नलिखित तरीके से आजमाया:

match =[]
for i in range(len(x)):
    if x[i] == x1[i]:
        new_array = x1[i]
        match.append(new_array)

print match

यह काम नहीं लग रहा है। कृपया नया 2D सरणी बनाने का कोई तरीका सुझाएं

3
bhjghjh 28 मार्च 2018, 07:36

4 जवाब

सबसे बढ़िया उत्तर

np.isin आजमाएं।

arr1 = np.array([[1,3,2,5,6,7], [2,4,2,4,4,4]])
arr2 = np.array([[0,1,11,5,7], [1,1,1,1,1]])
arr2[:,np.isin(arr2[0], arr1[0])]
array([[1, 5, 7],
       [1, 1, 1]])

np.isin(arr2[0], arr1[0]) जांचता है कि arr2[0] का प्रत्येक अवयव arr1[0] में है या नहीं। फिर, हम arr2 में तत्वों का चयन करने के लिए परिणाम का उपयोग बूलियन इंडेक्स सरणी के रूप में करते हैं।

5
Tai 28 मार्च 2018, 05:08

छोटे सरणियों के लिए सबसे अच्छा समाधान नहीं है, लेकिन वास्तव में बड़े सरणियों के लिए, तेजी से काम करता है -

import numpy as np
import pandas as pd

n1 = np.transpose(np.array([[1,3,2,5,6,7], [2,4,2,4,4,4]]))
n2 = np.transpose(np.array([[0,1,11,5, 7], [1,1,1,1,1]]))
np.array(pd.DataFrame(n1).merge(pd.DataFrame(n2), on=0, how='inner').drop('1_x', axis=1))
1
Aritesh 28 मार्च 2018, 04:51

यह मानते हुए कि आपके 2-डी सरणियों में (x, y) जोड़े हैं, एक साधारण लूप काम कर सकता है:

arr1   = [[1, 2], [3, 4], [2, 2]]
arr2   = [[0, 1], [1, 1], [11, 1]]
result = []

for pair1 in arr1:
    for pair2 in arr2:
        if (pair1[0] == pair2[0]):
            result.append(pair2)

print(result)
1
Vivek Pabani 28 मार्च 2018, 04:46
#!/usr/bin/env python3

from io import StringIO
import pandas as pd

fileA = """x   y
1   2
3   4
2   2
5   4
6   4
7   4
"""

fileB = """x1    y1
0       1
1       1
11      1
5       1
7       1
"""


df1 = pd.read_csv(StringIO(fileA), delim_whitespace=True, index_col="x")
df2 = pd.read_csv(StringIO(fileB), delim_whitespace=True, index_col="x1")

df = pd.merge(df1, df2, left_index=True, right_index=True)
print(df["y1"])

# 1    1
# 5    1
# 7    1

https://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging

2
Dyno Fu 28 मार्च 2018, 04:53