evaluate、countif与数组

文章讨论了在Excel中使用sum函数结合evaluate和countif函数处理数组时出现的问题。当直接使用sum(evaluate(数组))或sum(countif(区域,数组))能得到正确结果,但在sum(countif(区域,evaluate(数组)))的组合中,由于evaluate将文本数组转换为单一数值导致countif条件错误。通过使用Ctrl+Shift+Enter创建数组公式,可以得到正确的计算结果。

1.直接sum(evaluate(数组)),sum里面是数组,结果无误
2.sum(countif(区域,数组)),也无问题,countif出来的结果也是数组,sum结果无误
3.sum(countif(区域,evaluate(数组))),这就有问题了,对文本数组evaluate出来的结果是一个数,不论数组是啥,evaluate的结果是1,所以countif的条件也就变成了1,结果有误,
此时使用control+shift+enter,跳出单元格成数组公式,虽然利用公式的求值功能看着有问题,但是结果无误。
以上evaluate里面的数组都是文本型数组

def compute_metrics(eval_preds): logits, labels = eval_preds preds = np.argmax(logits, axis=-1) # 解码预测和参考的文本为SMILES字符串 predictions_texts = tokenizer.decode(preds, skip_special_tokens=True) references_texts = [tokenizer.decode(label, skip_special_tokens=True) for label in labels] # 计算分子有效性 valid_molecule_count = sum(1 for smiles in predictions_texts if Chem.MolFromSmiles(smiles) is not None) total_count = len(predictions_texts) molecule_validity = valid_molecule_count / total_count if total_count > 0 else 0 # 计算Tanimoto相似度 tanimoto_similarities = [] for pred, ref in zip(predictions_texts, references_texts): pred_mol = Chem.MolFromSmiles(pred) ref_mol = Chem.MolFromSmiles(ref) if pred_mol and ref_mol: pred_fp = AllChem.GetMorganFingerprint(pred_mol, 6) ref_fp = AllChem.GetMorganFingerprint(ref_mol, 6) similarity = DataStructs.TanimotoSimilarity(pred_fp, ref_fp) tanimoto_similarities.append(similarity) mean_similarity = sum(tanimoto_similarities) / len(tanimoto_similarities) if tanimoto_similarities else 0 molecular_validity_results = {'molecular_validity': molecule_validity} similarity_results = {'mean_tanimoto_similarity': mean_similarity} # 将所有结果进行组合 combined_results = {**molecular_validity_results, **similarity_results} return combined_results解决报错 File "/data/coding/transformers_from_scratch-main/pretrain.py", line 157, in main trainer.train() File "/data/miniconda/envs/torch/lib/python3.10/site-packages/transformers/trainer.py", line 2241, in train return inner_training_loop( File "/data/miniconda/envs/torch/lib/python3.10/site-packages/transformers/trainer.py", line 2612, in _inner_training_loop self._maybe_log_save_evaluate( File "/data/miniconda/envs/torch/lib/python3.10/site-packages/transformers/trainer.py", line 3085, in _maybe_log_save_evaluate metrics = self._evaluate(trial, ignore_keys_for_eval) File "/data/miniconda/envs/torch/lib/python3.10/site-packages/transformers/trainer.py", line 3039, in _evaluate metrics = self.evaluate(ignore_keys=ignore_keys_for_eval) File "/data/miniconda/envs/torch/lib/python3.10/site-packages/transformers/trainer.py", line 4105, in evaluate output = eval_loop( File "/data/miniconda/envs/torch/lib/python3.10/site-packages/transformers/trainer.py", line 4394, in evaluation_loop metrics = self.compute_metrics( File "/data/coding/transformers_from_scratch-main/pretrain.py", line 99, in compute_metrics predictions_texts = tokenizer.decode(preds, skip_special_tokens=True) File "/data/miniconda/envs/torch/lib/python3.10/site-packages/transformers/tokenization_utils_base.py", line 3860, in decode return self._decode( File "/data/miniconda/envs/torch/lib/python3.10/site-packages/transformers/tokenization_utils_fast.py", line 668, in _decode text = self._tokenizer.decode(token_ids, skip_special_tokens=skip_special_tokens) argument 'ids': 'list' object cannot be interpreted as an integer
07-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值