Python:如何循环乘法并丢弃那些二进制值0?

时间:2016-02-21 08:58:11

标签: python csv binary multiplication itertools

我在csv文件中填充了二进制值,并且我想在两个文件上应用乘法的实数值列表。如何丢弃在csv文件中与值0相乘的值?任何人都可以帮我解决算法部分吗?

Binary.csv

这是3行二进制值。

0 1 0 0 1 0 1 0 0 
1 0 0 0 0 1 0 1 0
0 0 1 0 1 0 1 0 0

Real.csv

这是一行实数值。

0.1 0.2 0.4 0.1 0.5 0.5 0.3 0.6 0.3

在所需输出之前

0.0 0.2 0.0 0.0 0.5 0.0 0.3 0.0 0.0
0.1 0.0 0.0 0.0 0.0 0.5 0.0 0.6 0.0 
0.0 0.0 0.4 0.0 0.5 0.0 0.3 0.0 0.0

所需的输出

0.2 0.5 0.3
0.1 0.5 0.6
0.4 0.5 0.3

代码

import numpy as np
import itertools

a = np.array([[0,1,0,0,1,0,1,0,0],[1,0,0,0,0,1,0,1,0],[0,0,1,0,1,0,1,0,0]])
b = np.array([0.1,0.2,0.4,0.1,0.5,0.5,0.3,0.6,0.3])
c=(a * b)

d=itertools.compress(c,str(True))
print d

上面的代码只是我同时尝试的另一种选择。对造成的不便表示歉意。非常感谢您的所有帮助。

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点,我很简单:

import csv

with open('real.csv', 'rb') as csvfile:
    for row in csv.reader(csvfile, delimiter=' '):
        reals = row

with open('binary.csv', 'rb') as csvfile:
    pwreader = csv.reader(csvfile, delimiter=' ')

    for row in pwreader:
        result = []
        for i,b in enumerate(row):
            if b == '1' :
                result.append(reals[i])

        print " ".join(result)

你会注意到这里没有乘法。从CSV文件读取时,值为字符串。你可以将每个字段转换为数字,构造一个位掩码,然后从那里开始工作,但值得吗?我刚刚使用了一个简单的字符串比较。无论如何,输出都是一个字符串。

编辑:现在我发现你的代码中有numpy数组,忽略了csv文件。请停止更改球门柱!