AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / 问题

All perguntas(coding)

Martin Hope
STATTHINGY TRENTON
Asked: 2025-04-21 22:38:32 +0800 CST

TypeError: Objeto do tipo ndarray não é serializável em JSON, apesar do conversor personalizado (Nested Dict/NumPy 2.0)

  • 6

Estou trabalhando com resultados de simulação armazenados em uma estrutura defaultdict profundamente aninhada. Essa estrutura (data_to_save) mistura tipos padrão do Python (listas, ints, floats, None) com arrays NumPy.

Preciso salvar toda esta estrutura data_to_save em um arquivo JSON. Como json.dump não consegue lidar com arrays NumPy nativamente, e estou usando o NumPy 2.0 (onde os aliases de tipo mais antigos foram removidos), escrevi uma função recursiva personalizada, make_json_serializable, para converter tipos NumPy e lidar com possíveis problemas como np.nan:

import numpy as np
import json
from collections import defaultdict

# Custom converter for NumPy types and NaNs
def make_json_serializable(obj):
    if isinstance(obj, np.ndarray): return obj.tolist()
    # Important: Handle defaultdict specifically before dict
    if isinstance(obj, defaultdict): return {k: make_json_serializable(v) for k, v in obj.items()}
    if isinstance(obj, dict): return {k: make_json_serializable(v) for k, v in obj.items()}
    if isinstance(obj, list): return [make_json_serializable(i) for i in obj]
    # Check base Python types first
    if isinstance(obj, (int, float, bool, complex, str, type(None))): return obj
    # Check abstract NumPy types (NumPy 2.0+)
    if isinstance(obj, np.integer): return int(obj)
    if isinstance(obj, np.floating): return float(obj) if not np.isnan(obj) else None # Convert NaN to None for JSON compatibility
    if isinstance(obj, np.complexfloating): return {'real': float(obj.real), 'imag': float(obj.imag)}
    if isinstance(obj, np.bool_): return bool(obj)
    if isinstance(obj, (np.void)): return None
    # Fallback if type not recognized
    # print(f"Warning: Type {type(obj)} not explicitly handled. Passing as is.") # Optional debug
    return obj
# --- END CONVERTER ---

# Example of the nested structure (simplified)
data_to_save = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: defaultdict(dict))))
data_to_save['category_A']['size_X']['config_1']['setting_alpha']['parameter_grid'] = np.linspace(0, 1, 5)
data_to_save['category_A']['size_X']['config_1']['setting_alpha']['metric_array_1'] = np.array([0.1, 0.2, 0.5, 0.8, 1.0])
data_to_save['category_A']['size_X']['config_1']['setting_alpha']['num_valid_entries'] = 5
data_to_save['category_A']['size_X']['config_1']['setting_alpha']['distribution_data'] = {
    '0.5': {'size_values': [1, 2, 3], 'normalized_counts': np.array([0.5, 0.3, 0.2]), 'source_count': 5}
}
# ... structure can be deeply nested with more arrays ...

Minha tentativa de salvar esses dados resulta em um TypeError:

# Current (failing) saving code:
output_filename = "output_data.json"
try:
    # PROBLEM: This tries to dump the raw structure with NumPy arrays using the standard encoder
    temp_dict_structure = json.loads(json.dumps(data_to_save)) # <-- FAILS HERE with TypeError

    # The custom converter is intended to run here, but never gets called due to the previous line's error
    serializable_data = make_json_serializable(temp_dict_structure)

    with open(output_filename, "w") as f:
        json.dump(serializable_data, f, indent=2, allow_nan=False) # NaNs should be None by converter
    print(f"Data saved to: {output_filename}")

except TypeError as e_json:
    print(f"ERROR during JSON processing: {e_json}") # Output: ERROR during JSON processing: Object of type ndarray is not JSON serializable
except Exception as e_save:
    print(f"ERROR saving file: {e_save}")

A mensagem de erro TypeError: Object of type ndarray is not JSON serializable aponta para a chamada json.dumps(data_to_save). Isso confirma que o codificador JSON padrão encontra um array NumPy antes que minha função make_json_serializable tenha a chance de convertê-lo. O comando intermediário json.loads(json.dumps(...)) provavelmente foi uma tentativa de converter defaultdicts, mas ele aciona o TypeError primeiro.

Pergunta:

Como posso aplicar corretamente minha função de conversão personalizada (make_json_serializable) a toda a estrutura defaultdict aninhada (data_to_save) antes de passá-la para json.dump? O objetivo é garantir que todos os arrays NumPy aninhados e tipos numéricos especiais sejam convertidos em listas básicas do Python, ints, floats ou None, resolvendo o TypeError.

python
  • 1 respostas
  • 39 Views
Martin Hope
user30330533
Asked: 2025-04-21 22:09:24 +0800 CST

Exibindo porcentagens de estratos em parcelas aluviais

  • 7

Tenho dados de um estudo de intervenção com 4 grupos experimentais (Grupo) e três pontos de medição (Tempo). Realizei uma análise de perfil e transição, que resultou em 4 perfis (Perfil). Criei um diagrama aluvial mostrando as transições dos perfis entre os pontos de medição para cada grupo experimental.

library(ggplot2)
library(ggalluvial)
library(dplyr)
library(tidyr)

df <- tibble(id = 1:400, group = sample(1:4, size = 400, replace = TRUE)) |>
crossing(time = 1:3) |>
mutate(profile = sample(1:4, size = n(), replace = TRUE))|>
mutate(profile = as.character(profile), time = as.character(time))


ggplot(df, aes(x = time, stratum = profile, alluvium = id, fill = profile, label = profile)) +
    scale_fill_brewer(type = "seq", palette = "BrBG") +
    geom_flow() +
    geom_stratum() +
    labs(x = "Time", y = "N") +
    facet_wrap('group', labeller = label_both)

Como os 4 grupos não têm o mesmo tamanho amostral, gostaria de plotar os tamanhos relativos dos estratos em vez dos absolutos, de modo que todos os perfis para cada ponto no tempo totalizem 100%. Não sei como fazer isso. Usar o atributo de peso não funcionou.

  • 3 respostas
  • 88 Views
Martin Hope
DudeBro231
Asked: 2025-04-21 22:03:55 +0800 CST

Excluir coluna em sapply(dat_clean, FUN = function(x){x / sum(x)}) em R

  • 6

Estou trabalhando em um trecho de código R para calcular a diversidade em um conjunto de dados de taxonomias de fungos. O tutorial que estou seguindo tem um trecho de código que soma cada linha, o que não está funcionando porque a primeira coluna (que exibe os números da OTU) não é numérica, mas sim de caracteres. Aqui está o trecho de código:

# make relative abundances
dat_relab = as.data.frame(sapply(dat_clean, FUN = function(x){x / sum(x)}))
rownames(dat_relab) = rownames(dat_clean)

# Remove low abundant ASVs, i.e. for which total relative abundance is lower than 0.01%
dat_relab$relab = rowSums(dat_relab) # adds column with total number of reads per ASV
keep01 = which(dat_relab$relab > 0.0001) # selects which ASVs fit the cut-off
dat_relab01 = dat_relab[keep01, -26] # outputs filtered table, and removes added column with number reads

# Select the ASVs with relative abundance higher than 0.01% from the ASV table with read number for the subsequent analysis
dat_clean2 = dat_clean[rownames(dat_relab01), colnames(dat_relab01)]

O código para na 2ª linha e fornece o seguinte erro: Erro em sum(x): 'tipo' (caractere) de argumento inválido

Eu entendo logicamente qual é o problema aqui; a primeira coluna dos dados não é numérica e não será somada. Meu problema é entender como corrigir isso e por que não está dando errado no tutorial (que tem os dados formatados da mesma forma).

  • 2 respostas
  • 68 Views
Martin Hope
Emil B
Asked: 2025-04-21 21:49:42 +0800 CST

Como instalar httpx[http2] no WSL2

  • 6

Estou criando um programa em Python para testar um servidor web que estou construindo. Uso httpx e queria usar http2 também, para poder enviar requisições http versão 2. A única maneira que encontrei de instalá-lo é pip install httpx[http2], mas o pip não está funcionando no WSL ( error: externally-managed-environment). Eu resolvi isso com https, python3-pip install httpxmas python3-pip install httpx[http2]parece que não funciona, nem com nenhuma outra variante que tentei.

Para esclarecer, tanto meu servidor web quanto meu programa python estão sendo executados em WSL.

O erro que me fez olhar para o http2 foi:

Error: Using http2=True, but the 'h2' package is not installed. Make sure to install httpx using `pip install httpx[http2]`.

python
  • 1 respostas
  • 50 Views
Martin Hope
Bruno Casarotti
Asked: 2025-04-21 21:46:27 +0800 CST

Como usar camel case em parâmetros de string de consulta e OpenAPI no .NET 9 com API mínima?

  • 7

Quero que minha especificação JSON do OpenAPI use Camel Case em todos os parâmetros de string de consulta para minhas rotas. Até agora, a única maneira de fazer isso funcionar foi usando [FromQuery(Name = "camelCase")]em todas as minhas propriedades. Existe uma maneira melhor de definir essa configuração em algum lugar para que eu não precise fazer essas alterações em todas as propriedades da minha API?

public class UsageQueryParams
{
    [FromQuery(Name = "contractType")] public ContractType? ContractType { get; set; }
    [FromQuery(Name = "limit")] public long? Limit { get; set; }
}
c#
  • 1 respostas
  • 59 Views
Martin Hope
Carlos Henrique Reis
Asked: 2025-04-21 21:35:35 +0800 CST

Como usar ícones do FontAwesome com componentes autônomos do Angular Material 19?

  • 6

Estou trabalhando em um projeto Angular 19 usando componentes independentes e o Angular Material .
Quero usar ícones FontAwesome ( @fortawesome/angular-fontawesome) junto com componentes do Angular Material, como mat-icon, mas não tenho certeza sobre a maneira correta de integrá-los.

Aqui está o que fiz até agora:

/// <reference types="@angular/localize" />

import { bootstrapApplication } from '@angular/platform-browser';
import { appConfig } from './app/app.config';
import { AppComponent } from './app/app.component';
import { FaIconLibrary } from '@fortawesome/angular-fontawesome';

Eu instalei os pacotes necessários:

npm install @fortawesome/fontawesome-svg-core
npm install @fortawesome/free-solid-svg-icons
npm install @fortawesome/angular-fontawesome

No entanto, não tenho certeza:

  • Como registrar corretamente os ícones FaIconLibraryem uma configuração autônoma .
  • Como usar os <fa-icon>componentes internos do Angular Material, como mat-list, mat-toolbar, etc.
  • Se há uma maneira limpa de usar os ícones do FontAwesome oumat-icon se <fa-icon>eles devem ser usados ​​separadamente.

Qualquer exemplo ou prática recomendada seria apreciada!

angular
  • 1 respostas
  • 67 Views
Martin Hope
Enlico
Asked: 2025-04-21 21:30:49 +0800 CST

Como a garantia de imparcialidade do GHC pode não aparecer se um thread for desagendado enquanto não estiver segurando o MVar?

  • 7

Em Programação Paralela e Concorrente em Haskell , de Simon Marlow, o capítulo 7 começa na página 125 com este exemplo,

import Control.Concurrent
import Control.Monad
import System.IO

main :: IO ()
main = do
  hSetBuffering stdout NoBuffering
  _ <- forkIO (replicateM_ 100000 (putChar 'A'))
  replicateM_ 100000 (putChar 'B')

que tem uma saída como esta

BBBBBBBABABABAAAAAAA

(que, aliás, é o resultado que realmente obtive ao alterar 100000para 10o snippet acima e executar o programa).

No final do capítulo, página 140, é feito o seguinte comentário (grifo meu):

[…] Este é um exemplo da garantia de imparcialidade na prática. […]. Portanto, isso leva à alternância perfeita entre as duas threads. A única maneira de o padrão de alternância ser quebrado é se uma thread for desescalonada enquanto não estiver segurando o MVar. De fato, isso acontece de tempos em tempos como resultado da preempção, e ocasionalmente vemos uma longa sequência de uma única letra na saída.

Com base no resultado que mostrei, sim, consigo ver que a alternância está quebrada, mas não entendi bem a explicação acima. Não há nem um MVarno primeiro exemplo.

haskell
  • 1 respostas
  • 54 Views
Martin Hope
Amora
Asked: 2025-04-21 21:25:04 +0800 CST

Fórmula do Planilhas Google para encontrar uma célula em uma matriz 2D e obter seu índice?

  • 6

Por exemplo, se eu tiver uma tabela mais ou menos assim:

R1 R2 R3
P1 Preto Borgonha Marrom
P2 Marrom Cobre Ferrugem
P3 Loiro Ruivo Vermelho

Quero conseguir pesquisar "Cobre" e obter seus dois índices correspondentes (P2, R2). Preciso conseguir obtê-los separadamente, então provavelmente uma fórmula para obter o "P" e outra para obter o "R". Obter os índices numéricos e alfabéticos no Planilhas Google e, em seguida, obter os "nomes" dos índices de lá provavelmente seria a melhor aposta, pelo que sei.

Tentei usar vlookup, hlookup, query, match, index e qualquer outra coisa que eu pudesse encontrar online, mesmo que vagamente relacionada, mas sem sucesso. O problema que encontrei com todas essas ferramentas é que elas só querem pesquisar uma linha ou coluna por vez, o que significa que, na melhor das hipóteses, eu precisaria de pelo menos 20 fórmulas diferentes para pesquisar cada linha, uma por uma.

Obrigado a todos pela ajuda!

google-sheets
  • 1 respostas
  • 55 Views
Martin Hope
newby73
Asked: 2025-04-21 21:17:08 +0800 CST

O preenchimento automático angular mostra valores diferentes quando a opção é selecionada duas vezes

  • 7

Contexto:
Tenho um componente Angular que renderiza um campo de preenchimento automático do Angular Material . O campo tem três opções, e cada opção contém um namee um id. Quando uma opção é selecionada, seu namecampo deve ser exibido no campo.

Problema:
Quando uma opção é selecionada inicialmente, o namecampo é exibido conforme o esperado. No entanto, quando a mesma opção é selecionada novamente, mesmo já estando selecionada, o idcampo exibe o campo. O campo nameexibe o campo da opção selecionada, e não o campo id.

Pergunta
Como isso pode ser corrigido para que, independentemente de quantas vezes uma opção seja selecionada, o namecampo seja sempre exibido, e não o idcampo?

StackBlitz

TS

import { CommonModule } from '@angular/common';
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { FormsModule } from '@angular/forms';
import {
  MatAutocompleteModule,
  MatAutocompleteSelectedEvent,
} from '@angular/material/autocomplete';
import { MatInputModule } from '@angular/material/input';

interface Item {
  id: string;
  name: string;
}

@Component({
  selector: 'app-autocomplete',
  standalone: true,
  templateUrl: './autocomplete.component.html',
  styleUrls: ['./autocomplete.component.css'],
  changeDetection: ChangeDetectionStrategy.OnPush,
  imports: [CommonModule, FormsModule, MatAutocompleteModule, MatInputModule],
})
export class AutocompleteComponent {
  options: Item[] = [
    { id: '1', name: 'Item One' },
    { id: '2', name: 'Item Two' },
    { id: '3', name: 'Item Three' },
  ];
  name: string = '';
  id: string = '';
  placeholder: string = 'Select an option';

  resetField() {
    this.name = '';
  }

  selectionChange(e: MatAutocompleteSelectedEvent) {
    this.name = e.option.viewValue;
    console.log(e.option.viewValue); // name
    console.log(e.option.value); // id
  }
}

HTML

<mat-form-field>
  <mat-label>{{ placeholder }}</mat-label>
  <input
    #assetInput
    type="text"
    [placeholder]="placeholder"
    matInput
    [(ngModel)]="name"
    [matAutocomplete]="auto"
  />
  <mat-autocomplete
    #auto="matAutocomplete"
    (optionSelected)="selectionChange($event)"
  >
    <mat-option *ngFor="let option of options" [value]="option.id">
      {{ option.name }}
    </mat-option>
  </mat-autocomplete>
</mat-form-field>
angular
  • 1 respostas
  • 32 Views
Martin Hope
Enlico
Asked: 2025-04-21 21:12:35 +0800 CST

Esclarecimento sobre a importância da imutabilidade do estado dentro de um MVar no contexto de concorrência

  • 6

Em Programação Paralela e Concorrente em Haskell , de Simon Marlow, nas páginas 133 e 134, o seguinte código é mostrado:

type Name        = String
type PhoneNumber = String
type PhoneBook   = Map Name PhoneNumber

newtype PhoneBookState = PhoneBookState (MVar PhoneBook)

lookup :: PhoneBookState -> Name -> IO (Maybe PhoneNumber)
lookup (PhoneBookState m) name = do
  book <- takeMVar m
  putMVar m book
  return (Map.lookup name book)

E na página seguinte, algumas observações. A parte final do segundo parágrafo me intriga um pouco. Aqui está a primeira metade do parágrafo:

Usar estruturas de dados imutáveis ​​em um wrapper mutável traz outros benefícios. Observe que, na lookupoperação, simplesmente capturamos o valor atual do estado e, em seguida, a Map.lookupoperação complexa ocorre fora da sequência takeMVar/ putMVar. Isso é bom para a concorrência, pois significa que o bloqueio é mantido apenas por um período muito curto.

Isso é bastante claro para mim, no sentido de que entendo que isso takeMVarcoloca o bloqueio e putMVaro libera imediatamente, de modo que os acessos simultâneos subsequentes ao PhoneBookStatenão sejam mais prejudicados. Ao mesmo tempo, também vejo que outras mutações do MVarsão possíveis, então, quando o tempo lookupretorna com um Just smth, esse (name, smth)par pode ter sido removido do mapa (ou, se retornou Nothing, alguns (name, smth)podem ter sido adicionados ao mapa).

Entretanto, não entendi o que a seguinte parte do parágrafo tenta transmitir:

Isso só é possível porque o valor do estado é imutável. Se a estrutura de dados fosse mutável, teríamos que manter o bloqueio enquanto operávamos nela.⁵


⁵. A outra opção é usar um algoritmo sem bloqueios, que é extremamente complexo e difícil de acertar.

O que isso significa? O autor está se referindo ao caso que Mapexpôs alguma API a uma mutação? Isso nem é possível, a menos que estejamos em IO, certo? Ou ele está se referindo a mutações realizadas no mconteúdo de (por outras threads após putMVara liberação do bloqueio) que de alguma forma afetaram booko conteúdo de ?

haskell
  • 2 respostas
  • 58 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve