二进制图像数据帧到欧几里德坐标

时间:2017-02-08 23:23:10

标签: python image pandas

我希望获取一个图像的数据帧,该图像是False / True的二进制布尔值,并将其转换为数据框为真的坐标数组。

例如,如果index [4]和column [8]为true,则会向数组添加4,8。

2 个答案:

答案 0 :(得分:2)

IIUC你可以这样做:

In [70]: df
Out[70]:
       a      b      c
0   True  False   True
1   True   True  False
2  False   True   True
3  False   True   True
4   True  False  False
5  False   True  False
6   True  False  False
7  False   True  False
8  False  False   True
9   True  False   True

In [71]: np.dstack(np.nonzero(df.values))[0]
Out[71]:
array([[0, 0],
       [0, 2],
       [1, 0],
       [1, 1],
       [2, 1],
       [2, 2],
       [3, 1],
       [3, 2],
       [4, 0],
       [5, 1],
       [6, 0],
       [7, 1],
       [8, 2],
       [9, 0],
       [9, 2]], dtype=int64)

或:

In [76]: np.stack(np.nonzero(df.values)).T
Out[76]:
array([[0, 0],
       [0, 2],
       [1, 0],
       [1, 1],
       [2, 1],
       [2, 2],
       [3, 1],
       [3, 2],
       [4, 0],
       [5, 1],
       [6, 0],
       [7, 1],
       [8, 2],
       [9, 0],
       [9, 2]], dtype=int64)

<强>设定:

df = pd.DataFrame(np.random.choice([True, False], (10, 3)), columns=list('abc'))

答案 1 :(得分:1)

设置

使用@ MaxU的示例数据框

import requests
import json
import csv

def getRows(data):
    return []

url = 'http://test_url'

with open('user.csv', 'rU') as data_file:
    data = csv.DictReader(data_file)
    for row in data:
        current_user = row['mdn']
        r = requests.get(url)
        data = json.loads(data)
        fname = "mydata.csv"
with open(fname,'wb') as outf:
    outcsv = csv.writer(outf)
    outcsv.writerows(getRows(data))

我猜你想要根据数据框df = pd.DataFrame({ 'a': [True, True, False, False, True, False, True, False, False, True], 'b': [False, True, True, True, False, True, False, True, False, False], 'c': [True, False, True, True, False, False, False, False, True, True]}) 和&#39;列`来确定坐标

选项1
index + stack

mask

选项2
只是s = df.stack() s[s].index.values array([(0, 'a'), (0, 'c'), (1, 'a'), (1, 'b'), (2, 'b'), (2, 'c'), (3, 'b'), (3, 'c'), (4, 'a'), (5, 'b'), (6, 'a'), (7, 'b'), (8, 'c'), (9, 'a'), (9, 'c')], dtype=object)

的位置
np.where

选项3
使用np.stack(np.where(df.values)).reshape(-1, 2) array([[0, 0], [1, 1], [2, 2], [3, 3], [4, 5], [6, 7], [8, 9], [9, 0], [2, 0], [1, 1], [2, 1], [2, 0], [1, 0], [1, 2], [0, 2]])

返回indexcolumns
np.where