Python: 如何进行循环乘法并丢弃那些二进制值0?
Python: How to do looping multiplication and discard those binary value 0?
我在一个 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
以上代码只是我同时尝试的另一种选择。对造成的不便表示歉意。非常感谢您在这里提供的所有帮助。
有几种方法,我的比较简单:
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 文件。请停止更改球门柱!
我在一个 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
以上代码只是我同时尝试的另一种选择。对造成的不便表示歉意。非常感谢您在这里提供的所有帮助。
有几种方法,我的比较简单:
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 文件。请停止更改球门柱!