运行时警告:在类型转换中遇到无效值 quantized_data = ((data - min_value) / quantization_step).astype(int)

0 投票
0 回答
17 浏览
提问于 2025-04-12 10:18

我在Ubuntu系统上运行一个Python代码,用来处理一个权重矩阵,但这个系统崩溃了,所以我现在在Windows上运行这个代码。问题是,它弹出了一个警告:16: RuntimeWarning: invalid value encountered in cast,意思是遇到了无效值。警告出现在这行代码上:quantized_data = ((data - min_value) / quantization_step).astype(int)。在Linux上是没有这个问题的,而且这个代码对于负值的处理结果也是符合预期的。

import numpy as np

def quantize_data(data, num_levels):
    # Find the maximum and minimum values
    min_value = np.min(data)
    max_value = np.max(data)

    # Calculate the width of each quantization interval (bin)
    quantization_step = (max_value - min_value) / (num_levels - 1)  # -1 to ensure covering the entire range

    # Handle division by zero
    if np.isnan(data).any():
        print("Warning: NaN values encountered in data.")

    # Quantize the data
    quantized_data = ((data - min_value) / quantization_step).astype(int)
    print("Quatized Data",quantized_data)

    # Handle NaN values
   # quantized_data[np.isnan(quantized_data)] = 0  # Replace NaN values with 0

    return quantized_data


def count_binary_digits(quantized_data):
    # Initialize counters
    num_ones = 0
    num_zeros = 0

    # Iterate through each value in quantized_data
    for value in quantized_data.flat:
        # Convert the value to its binary representation
        binary_string = np.binary_repr(value)
        print("binary",binary_string)
        # Count the number of '1' and '0' digits in binary representation
        num_ones += binary_string.count('1')
        num_zeros += binary_string.count('0')

    return num_ones, num_zeros


# Example usage:
file_path = 'D:/Διπλωματική Μεταπτυχιακού/Diplomatiki/code_for_wait_plot/results_trainLen_1000/Wout_rc_1000.npy'
data = np.load(file_path)
print(data)
num_levels = 2**32  # Number of quantization levels

# Quantize the data
quantized_data = quantize_data(data, num_levels)

print(quantized_data)
# Count binary digits
num_ones, num_zeros = count_binary_digits(quantized_data)

print("Number of '1' digits:", num_ones)
print("Number of '0' digits:", num_zeros)

这是第16行代码:quantized_data = ((data - min_value) / quantization_step).astype(int)

我试过一个在线编辑器,那个可以运行,但速度太慢了。

0 个回答

暂无回答

撰写回答